A. 什么是对象存储
对象存储的发展历史: 1999年成立的全球网络存储工业协会(SNIA)的对象存储设备(Object Storage Device)工作组发布了ANSI的X3T10标准。 对象存储的优点: 总体上来讲,对象存储同兼具SAN高速直接访问磁盘特点及NAS的分布式共享特点。 SAN(Storage Area Network)结构 采用SCSI 块I/O的命令集,通过在磁盘或FC(Fiber Channel)级的数据访问提供高性能的随机I/O和数据吞吐率,它具有高带宽、低延迟的优势,在高性能计算中占有一席之地,如SGI的CXFS文件系统就是基于SAN实现高性能文件存储的,但是由于SAN系统的价格较高,且可扩展性较差,已不能满足成千上万个CPU规模的系统。 来自中国存储网 ChinaStor.com NAS(Network Attached Storage)结构 它采用NFS或CIFS命令集访问数据,以文件为传输协议,通过TCP/IP实现网络化存储,可扩展性好、价格便宜、用户易管理,如目前在集群计算中应用较多的NFS文件系统,但由于NAS的协议开销高、带宽低、延迟大,不利于在高性能集群中应用。 对象存储结构 核心是将数据通路(数据读或写)和控制通路(元数据)分离,并且基于对象存储设备(Object-based Storage Device,OSD)构建存储系统,每个对象存储设备具有一定的智能,能够自动管理其上的数据分布。
B. 简述android平台提供了哪些数据存储方法
数据存储在开发中是使用最频繁的,Android平台主要有5种实现数据存储的方式。
第1种: 使用SharedPreferences存储数据
SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长 整形、Int整形、String字符串型的保存。
它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。
其存储位置在/data/data/<包名>/shared_prefs目录下。
SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。
实现SharedPreferences存储的步骤如下:
一、根据Context获取SharedPreferences对象
二、利用edit()方法获取Editor对象。
三、通过Editor对象存储key-value键值对数据。
四、通过commit()方法提交数据。
SharedPreferences对象与sqlite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。但是SharedPreferences也有其自身缺陷,比如其职能存储boolean,int,float,long和String五种简单的数据类型,比如其无法进行条件查询等。所以不论SharedPreferences的数据存储操作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据库这样的其他数据存储方式。
第2种: 内部文件存储数据
关于文件存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。
文件可用来存放大量数据,如文本、图片、音频等。
默认位置:/data/data/<包>/files/***.***。
openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。
创建的文件保存在/data/data//files目录,如: /data/data/cn.itcast.action/files/itcast.txt ,通过点击Eclipse菜单“Window”-“Show View”-“Other”,在对话窗口中展开android文件夹,选择下面的File Explorer视图,然后在File Explorer视图中展开/data/data//files目录就可以看到该文件。
openFileOutput()方法的第二参数用于指定操作模式,有四种模式,分别为:
Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;
MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
如果希望文件被其他应用读和写,可以传入: openFileOutput(“itcast.txt”, Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE); android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的(位于/data/data//files),其他程序无法访问。
除非在创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有这样其他程序才能正确访问。 对于私有文件只能被创建该文件的应用访问,如果希望文件能被其他应用读和写,可以在创建文件时,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。
Activity还提供了getCacheDir()和getFilesDir()方法: getCacheDir()方法用于获取/data/data//cache目录 getFilesDir()方法用于获取/data/data//files目录。
第3种: 外部文件存储数据
把文件存入SDCard:
使用Activity的openFileOutput()方法保存文件,文件是存放在手机空间上,一般手机的存储空间不是很大,存放些小文件还行,如果要存放像视频这样的大文件,是不可行的。对于像视频这样的大文件,我们可以把它存放在SDCard。
SDCard是干什么的?你可以把它看作是移动硬盘或U盘。 在模拟器中使用SDCard,你需要先创建一张SDCard卡(当然不是真的SDCard,只是镜像文件)。
创建SDCard可以在Eclipse创建模拟器时随同创建,也可以使用DOS命令进行创建,如下: 在Dos窗口中进入android SDK安装路径的tools目录,输入以下命令创建一张容量为2G的SDCard,文件后缀可以随便取,建议使用.img: mksdcard 2048M D:\AndroidTool\sdcard.img 在程序中访问SDCard,你需要申请访问SDCard的权限。
在AndroidManifest.xml中加入访问SDCard的权限如下:
要往SDCard存放文件,程序必须先判断手机是否装有SDCard,并且可以进行读写。
注意:访问SDCard必须在AndroidManifest.xml中加入访问SDCard的权限。
Environment.getExternalStorageState()方法用于获取SDCard的状态,如果手机装有SDCard,并且可以进行读写,那么方法返回的状态等于Environment.MEDIA_MOUNTED。
Environment.getExternalStorageDirectory()方法用于获取SDCard的目录,当然要获取SDCard的目录,你也可以这样写:
第4种: SQLite数据库存储数据
SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLite.SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。
特点:
面向资源有限的设备,
没有服务器进程,
所有数据存放在同一文件中跨平台,
可自由复制。
SQLite 基本上符合 SQL-92 标准,和其他的主要 SQL 数据库没什么区别。它的优点就是高效,Android 运行时环境包含了完整的 SQLite。
SQLite 和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以在 CREATE TABLE 语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。当某个值插入数据库时,SQLite 将检查它的类型。如果该类型与关联的列不匹配,则 SQLite 会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储。比如可以把一个字符串(String)放入 INTEGER 列。SQLite 称这为“弱类型”(manifest typing.)。 此外,SQLite 不支持一些标准的 SQL 功能,特别是外键约束(FOREIGN KEY constrains),嵌套 transcaction 和 RIGHT OUTER JOIN 和 FULL OUTER JOIN, 还有一些 ALTER TABLE 功能。 除了上述功能外,SQLite 是一个完整的 SQL 系统,拥有完整的触发器,交易等等。
Android 集成了 SQLite 数据库 Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库。
对于熟悉 SQL 的开发人员来时,在 Android 开发中使用 SQLite 相当简单。但是,由于 JDBC 会消耗太多的系统资源,所以 JDBC 对于手机这种内存受限设备来说并不合适。因此,Android 提供了一些新的 API 来使用 SQLite 数据库,Android 开发中,程序员需要学使用这些 API。
数据库存储在 data/< 项目文件夹 >/databases/ 下。 Android 开发中使用 SQLite 数据库 Activites 可以通过 Content Provider 或者 Service 访问一个数据库。
创建数据库 Android 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。
Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。
SQLiteOpenHelper 的子类,至少需要实现三个方法:
1 构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。
2 onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。
3 onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。
接下来讨论具体如何创建表、插入数据、删除表等等。调用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase 实例,具体调用那个方法,取决于你是否需要改变数据库的内容:
update()方法有四个参数,分别是表名,表示列名和值的 ContentValues 对象,可选的 WHERE 条件和可选的填充 WHERE 语句的字符串,这些字符串会替换 WHERE 条件中的“?”标记。
update() 根据条件,更新指定列的值,所以用 execSQL() 方法可以达到同样的目的。 WHERE 条件和其参数和用过的其他 SQL APIs 类似。
delete() 方法的使用和 update() 类似,使用表名,可选的 WHERE 条件和相应的填充 WHERE 条件的字符串。 查询数据库 类似 INSERT, UPDATE, DELETE,有两种方法使用 SELECT 从 SQLite 数据库检索数据。
1 .使用 rawQuery() 直接调用 SELECT 语句; 使用 query() 方法构建一个查询。
Raw Queries 正如 API 名字,rawQuery() 是最简单的解决方法。通过这个方法你就可以调用 SQL SELECT 语句。
例如: Cursor c=db.rawQuery( “SELECT name FROM sqlite_master WHERE type=’table’ AND name=’mytable’”, null);
在上面例子中,我们查询 SQLite 系统表(sqlite_master)检查 table 表是否存在。返回值是一个 cursor 对象,这个对象的方法可以迭代查询结果。 如果查询是动态的,使用这个方法就会非常复杂。
例如,当你需要查询的列在程序编译的时候不能确定,这时候使用 query() 方法会方便很多。
Regular Queries query() 方法用 SELECT 语句段构建查询。SELECT 语句内容作为 query() 方法的参数,比如:要查询的表名,要获取的字段名,WHERE 条件,包含可选的位置参数,去替代 WHERE 条件中位置参数的值,GROUP BY 条件,HAVING 条件。 除了表名,其他参数可以是 null。所以,以前的代码段可以可写成:
String[] columns={“ID”, ”inventory”};
Java代码
String[] parms={"snicklefritz"}; Cursor result=db.query("widgets", columns, "name=?",parms, null, null, null);
使用游标
不管你如何执行查询,都会返回一个 Cursor,这是 Android 的 SQLite 数据库游标,
使用游标,你可以:
通过使用 getCount() 方法得到结果集中有多少记录;
通过 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍历所有记录;
通过 getColumnNames() 得到字段名;
通过 getColumnIndex() 转换成字段号;
通过 getString(),getInt() 等方法得到给定字段当前记录的值;
通过 requery() 方法重新执行查询得到游标;
通过 close() 方法释放游标资源;
在 Android 中使用 SQLite 数据库管理工具 在其他数据库上作开发,一般都使用工具来检查和处理数据库的内容,而不是仅仅使用数据库的 API。
使用 Android 模拟器,有两种可供选择的方法来管理数据库。
首先,模拟器绑定了 sqlite3 控制台程序,可以使用 adb shell 命令来调用他。只要你进入了模拟器的 shell,在数据库的路径执行 sqlite3 命令就可以了。
数据库文件一般存放在: /data/data/your.app.package/databases/your-db-name 如果你喜欢使用更友好的工具,你可以把数据库拷贝到你的开发机上,使用 SQLite-aware 客户端来操作它。这样的话,你在一个数据库的拷贝上操作,如果你想要你的修改能反映到设备上,你需要把数据库备份回去。
把数据库从设备上考出来,你可以使用 adb pull 命令(或者在 IDE 上做相应操作)。
存储一个修改过的数据库到设备上,使用 adb push 命令。 一个最方便的 SQLite 客户端是 FireFox SQLite Manager 扩展,它可以跨所有平台使用。
如果你想要开发 Android 应用程序,一定需要在 Android 上存储数据,使用 SQLite 数据库是一种非常好的选择。
第五种: 网络存储数据
前面介绍的几种存储都是将数据存储在本地设备上,除此之外,还有一种存储(获取)数据的方式,通过网络来实现数据的存储和获取。
我们可以调用WebService返回的数据或是解析HTTP协议实现网络数据交互。
C. 如何从众多的Azure管理工具中做出正确选择
自从Windows Azure首次发布以来,微软公司的首要重点就一直是开发出一套工具来帮助用户管理其资源。这个云计算平台是出了名地难于管理,但是微软公司也在一直致力于满足客户需求并为供应商和开发人员提供一个应用程序编程接口(API)以扩展其功能。众多第三方厂商和开源企业都加入了为微软公司开发管理Azure不同方面工具的行列中,从而为用户提供一种较好的管理体验。但是,面对着所有执行不同任务的无数选择对象,作为用户的你又应当如何作出正确选择呢?首先,我们可以把这些工具划分为三种类别:微软公司的、开源的以及第三方供应商的。
微软公司提供的管理工具与服务 作为微软公司降低管理Azure资源复杂性计划的一部分,他们为客户提供的工具能够在一定程度上帮助他们。有几种选项可供选择,用户可以使用组合的、或独立的方式来协助完成不同的任务。
Windows Azure管理门户:Windows Azure管理门户是进行Azure资源管理的主要方法。这个工具可允许用户管理除了通过其预览页面为增强测试提供更新以外Windows Azure的各个方面。而且,微软公司又于近期推出了一个具有丰富图形用户界面(GUI)的升级版Windows Azure管理门户工具。
Azure PowerShell: Azure PowerShell是一款供Windows 服务器操作系统中众多角色和功能使用的脚本环境和框架,用户可通过它管理几乎所有的Azure资源。它可被用于执行各种任务,其中包括以命令行提示的方式进行交互,以及通过脚本程序进行自动任务执行。使用Azure PowerShell的主要优点就是,用户可通过使用PowerShell脚本程序自动重复执行Azure任务。
Azure PowerShell强健如Unix shell。它的cmdlet执行的功能与Windows Azure管理门户一样,可用于创建、测 试、部署以及管理通过Azure平台交付的服务。开始学习Azure PowerShell的一个好方法就是使用这些cmdlet。微软公司还在其脚本程序中心维护着一个Azure脚本程序库。
Azure跨平台命令行界面:Azure的跨平台命令行界面为用户使用Azure资源提供了一种跨平台开源命令的方法。而名为xplat-cli的工具也为Azure管理门户提供了类似的功能。虽然PowerShell的 cmdlet只能在Windows操作系统上运行,但是xplat-cli则允许非windows虚拟管理员在其它不同操作系统上使用Azure资源,其中包括:Linux、Windows以及Mac等。系统中心应用程序控制器。如果你在你的内部部署网络中已经安装了系统中心应用程序控制器,那么你就可以连接至你的Windows Azure订阅,它能够让你轻松地配置、部署以及管理Azure虚拟机和服务。通过使用应用程序控制器,你能够把一个现有的虚拟机复制至Azure,把虚拟机模板部署至Azure以及管理订阅设置。
Visual Studio的Windows Azure工具:如果你已经安装了Visual Studio的Windows Azure工具,那么你就可以在Windows Azure 中以你的存储账号查看二进制大对象、队列以及表数据。服务器浏览器是Visual Studio Windows Azure工具中的一部分,它让开发人员能够管理你在Azure中创建的存储账号。它还提供了创建Azure虚拟机和对这些虚拟机进行远程调试的功能。
Windows Azure AD权限管理管理工具:微软公司提供了一套工具,用于在你提交内容至其云计算服务时进行数据加密和使用限制设置。权限管理功能可以帮助用户保护由微软Office及其他应用程序创建和交换的内容。如果你是一名Office 365的用户或者如果你已订阅了微软在线服务,那么你就可以下载这个工具并开始管理和配置Exchange Online、SharePoint以及Office应用程序的权限管理功能。
Windows Azure 和服务管理REST API:通过使用服务管理REST API开放软件应用程序,软件供应商和开发人员可以进一步扩展Azure的管理功能。Azure的REST API为用户访问Windows Azure资源提供了一种编程的方式。
Azure管理的开源选项
通过使用REST API访问Azure的二进制大对象、表和队列,有很多Azure管理功能的开源扩展工具正试图解决相关难题。
Chef Knife Azure插件:虽然Azure PowerShell是一个管理Windows Azure不同方面的核心脚本平台语言,但是它只能用于Widnows 操作系统,它并不是一个开源平台。开源平台的优点在于,它可实现跨平台应用并得到强大用户社区的支持。微软公司的开放技术团队正与开源开发运营工具Chef的开发团队协作,以提高Windows Azure的资源管理功能。Knife-Azure是一个能够在Windows Azure中实现虚拟机配置自动化的插件工具。这个插件工具可允许用户直接以命令行的方式启动和管理实例,以及轻松地管理、调整和重建Azure环境。Knife-Azure插件的另一个优势就是,它可为开发和测试工作提供创建你的生产环境完美副本的功能。
Azure存储浏览器工具:Azure存储浏览器工具可配合管理二进制大对象、队列以及表形式的Azure存储。
Azure Blob Studio 2011:与Azure存储浏览器一样,Azure Blob Studio也是一个专为配合云计算存储应用而设计的工具。该工具是使用Visual Basic 2010 开发编写的一个Windows Presentation Foundation应用程序,它可让开发人员轻松地管理Windows Azure二进制大对象存储服务中的文件,他们可以使用本地的开发人员账户或你自己在互联网上的账户。
在Azure管理中起辅助作用的第三方工具
第三方工具供应商们充分利用Azure在过去的管理经验,为客户使用他们的云计算环境提供了更简便的方法。这些第三方工具供应商中最为突出的就是Cerebrata公司。
使用Cerebata公司的Azure浏览器工具,你就可以在一个地方管理你所有的微软Azure 二进制大对象。你可以可靠地使用一个响应迅速的用户界面来上传和下载二进制大对象。这个工具可允许你在你的存储账户之间传送二进制大对象,并简单地搜索和过滤你的Azure 二进制大对象。
D. 对象存储、块存储、文件存储分别是什么有什么区别
你可以把块理解成整个硬盘,文件理解成硬盘中的文件,对象理解成很多台服务器中的很多块硬盘。
E. redis一个对象能支持几千万个key么,读写会有什么问题
你好,很高兴回答你的问题1.Redis只适合精确检索,使用keys关键字做检索的话一定会遍历所有key,如果不能得出精确的key就不能用Redis。“数据对象可能很多,上百个”,对Redis来说“对象”只是字符串,你能做的也只是把对象序列化成字符串存储到Redis中,取出来时反序列化成对象。2.只要有精确的key,检索时不会有任何性能问题。Redis用于存储key的是一个字典对象,查询性能与数量级无关。3.用pipeline批量执行。4.数据量大部分取决于你使用的数据格式,也取决于你单个key的数据规模。比如使用Hash时,默认entry数量小于512时或value小于64Kb,使用ziplist作为数据结构存储,否则使用dict作为数据结构存储。一个key还可能产生一个ttl对象记录过期时间。很难非常准确地预计。如果不用过分精确地估计的话,建议先放入一部分数据,通过“info”关键字查询放入前后memory的大小来估算。5.Redis是近乎不可视的存储工具,如果要做数据统计、模糊检索,就不要用Redis。Redis更适合用于快速存取的场景。希望能帮到你
F. 数据库的概念我还有点不明白,数据时为一个对象存储调取的仓库,那么现在有SQL,还有access等数据库
不管是foxpro,SQLsever,还是ACCESS,以及Mysql,ORacle 等等其实都是一种数据仓库,但用处各有特点和不同,而且用户的需求也不一样,但万变不离其宗,即它们的数据库结构都是相通的,因此SQL查询语言除了个别函数不同外,基本也是通用的.
上外提到的几个数据库我觉得没有什么不同,只是根据用户需求而开发并附带的工具各为不一而巳.
G. Spark为什么要在Hadoop基础之上搭建
这个问题让我想起来之前看到的一篇关于spark和hadoop区别的文章,从二者的区别上基本可以分析为spark为何要在hadoop基础上搭建。看一下下面的几点:
1、目的:首先需要明确一点,hadoophe spark 这二者都是大数据框架,即便如此二者各自存在的目的是不同的。Hadoop是一个分布式的数据基础设施,它是将庞大的数据集分派到由若干台计算机组成的集群中的多个节点进行存储。Spark是一个专门用来对那些分布式存储的大数据进行处理的工具,spark本身并不会进行分布式数据的存储。
2、两者的部署:Hadoop的框架最核心的设计就是:HDFS和MapRece。HDFS为海量的数据提供了存储,则MapRece为海量的数据提供了计算。所以使用Hadoop则可以抛开spark,而直接使用Hadoop自身的maprece完成数据的处理。Spark是不提供文件管理系统的,但也不是只能依附在Hadoop上,它同样可以选择其他的基于云的数据系统平台,但spark默认的一般选择的还是hadoop。
3、数据处理速度:Spark,拥有Hadoop、 MapRece所具有能更好地适用于数据挖掘与机器学习等需要迭代的的优点;但不同于MapRece的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
4、数据安全恢复:Hadoop每次处理的后的数据是写入到磁盘上,所以其天生就能很有弹性的对系统错误进行处理;spark的数据对象存储在分布于数据集群中的叫做弹性分布式数据集中,这些数据对象既可以放在内存,也可以放在磁盘,所以spark同样可以完成数据的安全恢复。
H. 有了解软件定义存储的吗,寻专业解答
两个问题,分开来答。作者是来自我们Dell EMC中国研发集团的张卫兵▼▼▼什么是软件定义存储(SDS)?什么是软件定义存储(SDS),我们来看SNIA(Storage Networking Instry Association)给的定义:SNIA defines SDS as Virtualized storage with a service management interface. SDS includes pools of storage with data service characteristics that may be applied to meet the requirements specified through the service management interface. SNIA将软件定义存储(Software-defined Storage, SDS)定义为:拥有服务管理界面的虚拟化存储。SDS包含拥有数据服务特性的存储资源池,可以用于满足服务管理接口制定的存储需求。理解起来可能会比较抽象,我们先来看传统存储。传统的存储设备(NAS,SAN)大多是搭建在专门设计的硬件上,实现存储资源的集中管理和使用。比如在硬件层面定制大量的缓存用于加速数据读写,又如在硬件层面使用多处理单元实现高性能和高可用(HA)。对于传统存储,硬件和软件在设计之初就是紧密耦合在一起的。在软件层面,除了基本的存储路径,还需很多工作来驱动和使用特殊硬件资源。专用的硬件和软件为传统存储带来的性能的提高,但也带来了开发和运维的复杂性。不同厂商,甚至同一厂商的不同产品,存储设备的管理和使用的方式也不尽相同,进一步提高了运维的复杂性。每台存储设备都是相对孤立的系统,存储资源的管理和使用无法方便快捷的整合。在软件定义存储这个概念出现之前,存储行业还经历和很长一段时间分布式存储系统的发展过程。分布式存储系统可以看作是软件定义存储的雏形阶段,它通过软件将存储资源池化管理,对外提供文件和块存储服务。随着虚拟化时代的到来,对IT基础设施池化管理使用的需求越来越多,软件定义基础设施也随之兴起,在存储领域的软件定义解决方案就是软件定义存储(SDS)。软件定义存储剥离特定的硬件设备和硬件架构,更多的在存储的功能性上思考数据中心/企业的存储业务需求。软件定义存储将存储管理服务(Control Plane)从存储基础架构(Data Plane)里剥离出来,但仍然保持并扩展每个阵列独有的价值和特性。软件定义存储的实现方式,为企业提供了选择的便捷性和灵活性,可以帮助企业运行其业务,并满足弹性增减和和快速部署。但软件定义存储还不仅是将存储资源虚拟池化,由于传统存储存在上述诸多痛点,人们希望软件定义存储能够解决这些问题。所以软件定义存储除了提供虚拟化存储资源池之外还要支持:软件与硬件低耦合 – 软件定义存储支持的设备不应局限于专门的硬件,还需要支持通用硬件。可伸缩 - 在不影响可用性和性能的情况下,支持存储设施容量的无缝伸缩。自动化 - 通过高度的自动化简化存储资源管理,以降低维护存储设施的成本。标准化接口 - 提供标准化的API用于存储设备的管理、配置和维护。虚拟数据路径 – 在数据面支持文件/块/对象存储的读写接口。透明性 – 为消费者提供结合系统资源容量和成本,对自己使用和存储资源进行管控的能力。第二个问题:软件定义存储有哪些产品?应用情况如何?纯存储形态:开源存储Ceph,Gluster,HDFS等 Ceph和Gluster作为优秀的开源软件定义存储解决方案,在云计算和企业内部存储方面有着广泛的应用;HDFS作为大数据分析的后端存储,也有着很大的用户群体。商业化存储ECS, IsilonSD Edge等 ECS(Elastic Cloud Storage)是一款软件定义存储产品,支持云应用级别的对象存储。 IsilonSD Edge是软件定义的NAS存储产品,适合中小企业使用。超融合形态:商业化超融合产品:Dell EMC VxRail,VMware vSAN VxRail是一款虚拟化环境中的超融合产品,集成软件定义存储功能。 VMware vSAN是VMware提供的超融合基础架构解决方案。 软件定义存储在各类企业中有着广泛的应用,并且在蓬勃的发展。值得一提的是,很多传统的存储产品也在优化架构和增加功能,结合软件定义存储的需求发展,融入软件定义存储的行列。
I. Filecoin主网上线之际,技术解读算力奥秘
随着Filecoin主网上线,加密市场的新热点得以延续。
有人称Filecoin为泡沫,有人看好Filecoin市值超过比特币,而Filecoin的去中心化存储到底能不能真正解决目前面临的问题,Filecoin能否满足大家的期望,一切都只能拭目以待。
10月15日,Cointelegraph中文举办线上访谈对话栏目HUB LIVE,本期主题为《Filecoin主网上线之际,技术解读算力奥秘》。
Cointelegraph中文(简称CTC)HUB是一档由Cointelegraph中文发起的线上访谈栏目。聚焦区块链和加密货币行业领袖人物,探讨当下行业细分赛道的发展机遇与挑战,以及企业如何突破行业现状,引领未来。
本次访谈主持人由Cointelegraph中文商务总监Tracy担任,还邀请到了星际联盟联合创始人兼CTO毛必盛、火星云矿总裁商思林和IPFS原力区CTO李昕三位嘉宾。本次访谈针对Filecoin的愿景和目标、Filecoin经济模型和存在问题以及Filecoin在IPFS中的角色及起到的重要性等话题展开讨论。
嘉宾核心观点::
火星云矿总裁商思林: 过于随意改变规则并不利于项目的发展。相比算力的集中度,制定规则的集中度更令人担忧。
星际联盟联合创始人兼CTO毛必盛: 早期,Filecoin推崇将闲置的资源利用起来,提倡人人都可以挖矿。现在,Filecoin挖矿要求更专业的设备,有很高的门槛。
原力区CTO李昕 :我希望有技术的人才进入Filecoin,作为生态开发者,非常需要有很多服务和应用。特别是在Filecoin上线之后,后面有很多事情要做。
火星云矿总裁商思林 :一个理想化的网络和世界,你要靠什么来去建成?是需要靠区块链激励机制来建成,我觉得现在激励模型还存在一个问题。
星际联盟联合创始人兼CTO毛必盛: 虽然Filecoin是一个去中心化存储网络,但是Filecoin应该以一个个"中心化公司"来运营。
原力区CTO李昕: Filecoin在IPFS基础之上构建的分布式存储网络,为现有的互联网带来了"信任",将成为Web 3.0的重要基石。
以下是直播整理内容:
1.Tracy: 简单介绍一下你们自己以及你们目前做的项目还有Filecoin相关这个项目。
毛必盛:我是星际联盟联合创始人和CTO毛必盛,星际联盟于去年6月份成立,成立了一年多,目前发展情况非常不错。我们公司在太空竞赛中国内排名第七,海外节点拿到13万多个奖励币,目前4个节点正在运行,总算力在26P多。
商思林: 大家好!我是火星云矿商思林。火星云矿是火星区块链一站式挖矿服务平台,一切从挖矿开始,给投资者提供一站式的服务。今年6月份正式开始陆续上线Filecoin算力产品,与多家头部矿机厂商合作。目前约有4000头矿矿工在火星云矿平台上投资Filecoin,平台用户总持有算力在3万T左右。
李昕: 我是IPFS原力区联合创始人、CTO,分布式存储和Web3的推动者和实践者,深耕分布式存储20年。曾是思科对象存储中国区负责人,目前致力于Filecoin的共识算法、复制证明、经济模型、集群架构等关键模块的设计与生态建设。我们原力区从2017年就加入了IPFS这个赛道,一直致力于通过技术赋能Filecoin生态。
2.Tracy: 市场上最热的话题就是Filecoin,聊到币价大家都会关心。在这样行情下面,谁其实是最大获益者?Filecoin上线之前质押了大量代币,这波助推谁获益?谁又是背后助推者?是质押带来行情的吗?
毛必盛: 我觉得根据目前经济模型,矿工释放的币其实很少,前6个月全网释放出1.2亿个币,矿工只占8%。早期流通的币里面大部分是投资者所有,早期参与ICO的投资者是最大受益者。
商思林: Filecoin主网上线最大的受益者是交易所,中期可能是Fil私募投资者受益,从7毛到2块多,大家可以算一下里面的倍数。按照现行6个月、12个月、36个月释放代币,矿工前后限制比较多,加上惩罚机制。我觉得私募投资者也是受益方。
李昕: 我同意商总的观点!因为目前Filecoin和别的代币不一样,它有一个释放空间,最短也是6个月。前一个礼拜可能就非常稀缺,加上抵押,释放的币非常少,在这种情况下,价格虚高是很正常的。前期投资人的币也没有多少,实际上释放出来的币非常少,包括矿工手上也很少,看起来是投资人币多,实际上,市场上好多投资人已经签过一些协议,早期转给矿工一些币,他们手上币其实也不是很多。
由于整个市场比较火热,实际上是谁获利其实很难判断。这个时候如果价格虚高,对矿工来说并不是特别好的一件事情,因为抵押需要填币进去。
商思林: 除非它完全舍弃现在的路线,因为商业化存储要求极高的稳定性,包括长时间的稳定性,就是人人做贡献,就像当年咱们用BT、电驴看小视频一样,人人贡献带宽资源,那种不现实,极其不稳定。这是人人可以参与的,在家里弄一个设备都可以参与,但是现在变成非常专业化的一个存储网络。要专业的设备,专业的运维,大量的投资。
刚才提到了受比特币的启发,比特币靠对矿工一个简单的激励模型和长时间的发展,发展到今天。目前来看这也有一些微辞,感觉矿工已经投入了几十亿的人民币进去,后面还会更多。官方开发者对规则的改变比较频繁,而且官方倾听矿工的声音最起码还不够,这一点有些背离。一个理想化的网络和世界,你要靠什么来去建成?靠区块链激励机制来建成,我觉得现在激励模型还存在一个问题。 还有就是算力集中化,其实比特币的算力集中化更为严重,算力集中化本身不是一个问题,只要算力进出自由,而且整个算力网络多方参与,面临毁灭性打击时候,可以自我恢复,我觉得这就是践行去中心化的精神。我觉得相比较而言,算力集中度更让大家担忧,开发者的集中度,制定规则的人的集中度和去中心化,所谓核心开发者和项目团队是不是一个真正的开放社区,我觉得这一点非常重要。 当然,一个项目初期,更集中化一点我觉得可以理解,但是如果随意去改变规则,或者说没有经过多方讨论,就想出台一个规则,这其实也不利于网络发展。开发和治理中心化比算力中心化更值得让人警惕。
毛必盛: 我也赞同商总,早期,Filecoin提倡把闲置硬件资源利用起来,包括存储资源、带宽资源,现在需要非常专业的设备,这是一个比较大的改变。包括从2018年、2019年年初的时候,代码开源到现在,整个核心算法经过变革,包括前期一些英特尔机器做密封的时候效率比较低,因为网络、系统稳定性要求非常高,家庭挖矿变成集中式挖矿。 还有惩罚,早期白皮书里面讲的并不多,现在还是有一些惩罚的。6年来比特币到网络基线里释放的币比较少。存储挖矿早期只有70%,现在是55%,剩下15% 是项目方掌控,怎么分配等规则需要制定,还有前置质押,最坑的就是质押,大家为了保持算力增长,买了大量质押币。这个出发点我们也思考过,逼迫矿工想办法对接有用数据进来,矿工追求算力增长,但整个网络并不需要这么多垃圾数据,官方非常随意改变规则,包括竞赛第一阶段没有说算力直接平移过来。规则每天都在变,有点中心化的感觉。
3.Tracy: 刚刚商总谈了一下关于挖矿经济模型,包括刚才提到目前经济模型对矿工不太友好,怎么深度理解?
商思林: 简单来讲,你前期需要质押大量的币,同时你挖到的币在180天后线性释放。这个时候你简单算一下,主线上线以后,未来一个月,你可以拿到的币真的很少。开一个玩笑,现在逼着矿工到二级市场炒波段去,主网上线第一个月甚至前三个月你可以享受主网上线红利,理论上来讲你应该拿到,但是你拿不到。因为我们一开始包括跟投资者沟通的时候,大家盼着挖头矿,产出更高。现在经济模型造成市场币确实少,但是矿工币更少,大概这么一个逻辑。 我也同意质押币它的真实逻辑其实可能站不住,到底这个质押币为何需要质押,除了贡献流动性通缩之外,好像没有本质的区别。我觉得整个网络壮大,需要这个冷启动过程。官方过分强调有效数据,可能太偏理想化状态,主网可以快速启动,无论是通过财富效率还是网络壮大,让更多人认识它,我觉得这才是重点。
4.Tracy: 我们知道Filecoin里面,原力在技术上面贡献很多, Filecoin在IPFS角色中体现了什么重要性? 请李总回答一下。
李昕: Filecoin在IPFS基础之上构建的分布式存储网络,为现有的互联网发展带来了"信任",将成为Web 3.0的重要基石。IPFS网络是比较成功的一个网络,将来肯定对资源的利用率越来越高。IPFS它是完全开放开源的一个平台。这个平台的很大一个问题在哪里?这个平台它是一个很自由开放,可以随时进出、免费的一个平台。这样一个平台很难做商业化应用。因为做商业化应用,你需要有人提供有质量的服务,服务质量高,我愿意付钱,但是它没有做这一层。借助IPFS平台提供服务中心化的商家有很多。半中心化平台跟中心化平台跟之前完全不同。这样一来完全去中心化,可以通过Filecoin很多协议,变成一个成熟市场。因为IPFS本身自己是一个网络,当两个网络技术都是一致的,两个技术就可以打通,打通以后有很多生态服务商。
毛必盛: Filecoin挖矿有几个点比较重要,算法肯定是其中一个,早期的时候特别关键。现在基本上各大矿商都在优化,Filecoin也在优化,没有多大区别。 第二个是任务调度,每家矿商采购机型都不一样,任务调度这一块感觉比较多,比较关键。还有几个点比较容易被大家忽视,Filecoin挖矿跟比特币挖矿不太一样,第一个就是存储,Filecoin是存储类的项目,现在一些潜在问题没有被暴露出来,这里面存储这一块水还是非常深的。做过存储的人都知道,将来集群越来越大的时候,存储问题就会暴露出来。
我们将来会放大存储的优势,和有效数据应用落地在Filecoin网络中,这样会有很大优势。 还有一块是运维,大规模服务器,不间断运行,在早期我们也意识到了运维的重要性,在整个运维团队搭建也是投了重金,核心成员是来自阿里云的运维高级人才。目前运维这方面我们很有自信说,是数一数二的。未来,有效数据是核心竞争力,我们会更具有战略性布局去对接有效数据,以及在生态应用落地上面,有一些矿商只是想挖矿而已,我们是互联网基因比较强的公司,要在这个行业长久做下去,应用方面也做了很多布局。
6.Tracy: 挖矿需要质押代币,从而会形成对大量代币的需求,这样会不会催生去中心化借贷平台?
李昕: 抵押机制跟币的流通量有关,流通越多抵押越多。如果这个里面流通的币价格往上涨,越涨越不愿意卖。涨的情况下,大家反而越虚越买不到。这种情况下如何把大家系统里面区块链上计算出来的流通量与市场上真正的流通量匹配起来。市场上的流通量是在交易所交易的,而不是囤起来的,但是系统不知道。一定要把这个激活,把自己藏在枕头底下的私房钱拿出来存银行里面,可以向外借,向外贷。这样大家可以把存的币拿出来,得到利息,通过其他人可以把这个币代出来。像类似银行的机构,和去中心化平台,借贷中介同时也可以生存,使这个市场活跃起来。 流通也活跃起来,其实没有DeFi,也是可以做。Filecoin需要做几个事情,怎么把Filecoin这个币和DeFi打通,跨链这个东西,中间会有一个托管平台。直接发一个代币,需要有借贷这个部分。现在国内和国外有很多开发者和机构合作,可以来做借贷这个事情。所以,我觉得DeFi跟Filecoin有一个天然的契合点,
商思林: 我同意李总的看法,Filecoin可能是最适合做DeFi项目的。它可以在各个环节上进行锁仓,没有一个释放。矿工有前置质押,有多少天的释放,交易所也存在一个天数释放。这几方都是需要借贷,需要把这个锁住的东西的流动性释放出来,或者不够再借再还,天然契合DeFi这个需求。我们认为DeFi的借贷本质是挖矿,挖矿是央行,借贷DeFi是商业化银行,资金流动性汇集起来然后分发出去,让资产有效流动起来,这是它的一个价值。也可能打破Filecoin流动性悖论,这个悖论是前期币很少,然后市场上对矿工群体或者各个群体对币的需求量很大,造成币价上涨,又造成流动性问题,可能在二级市场做短期交易,没有办法真正流转到需要它的地方。这个悖论初期很难打破,因为币价上涨因素会刺激大家。前几天私募投资者说90%的人说开盘肯定会卖,绝大多数人不会考虑借贷。早期价格非常高,这个时候他们愿意卖。DeFi的核心价值在于它通过区块链和挖矿的方式,激励通过二级市场短期操作产生暴利。二级市场看起来暴利,但是风险很高。如果DeFi出来,我认为在Filecoin市场上会很好地流动起来。这对项目方来讲也是一个挑战,随着后面这个币流通越来越多,它会有制造通缩这样的需求,但是DeFi本质上是制造流动性,制造流动性对它来讲也是一个挑战。
7.Tracy: 类似于Filecoin去中心化存储,在国内如何适应监管?如何更好迎合这个市场?
李昕: 去中心化存储和中心化存储监管有什么区别?实际上差不了多少。因为对矿工来说,可以看成和中心化存储服务商一样,如果矿工能够遵守国家的法律法规,知道是什么东西,什么能存储,什么不能存储,要有相应的手段和软件来实现这种东西,那你就可以合规。中心化存储在国内像网络、阿里都是一样。一方面来讲,监管我觉得本质来说没有多大区别,尤其在目前相对来说不是那么多人提供存储的情况下,相对来说不是特别难,市场上给他们提供技术的服务商可能最多也就二三十家。 第二个方面,我觉得本身这个事情,在中国和其他国家没有多大区别,包括你在别的国家同样受监管。比如在欧洲,GDPR早就出来了,同样受到监管。可能这有比较大的难度,当这个东西足够分散的时候,相对来说可能难一些。
就跟互联网一样,我们现在人人都有微信,因为现在的互联网跟以前不一样,互联网从1.0到5.0,以前是可以读的互联网,现在是读写的互联网,每天可以上传很多东西。同样受监管,你每天上传东西有问题,很快被纠出来。这个角度来说其实很分散,技术难度大一些,但是本质没有很多问题,仍然可以去监管。
真正的数据服务商可能就需要做这些事情,而不是简单把别人的软件拿来用。还有一个方面,你要存真实的数据,这个东西怎么样来存储?在帮助大家合规这个方面要做很多事情。做真实的数据,验证客户,你可能有一些协议,必须要符合一些条款,你自己要负责。通过数据有保证,不违反条款等等一些类似手段帮助大家做事情。 针对保护隐私的问题,基本上是通过访问权限控制来做。这是一个方面,实际上监管还有很重要的一个方面,就是你的数据不能违法,实际上国内所有的存储云厂商都有自己很完善的工具去鉴别。
商思林: 我的观点是这样,大家知道以太坊上也可以写东西,如果从内容角度来讲它也可以写东西。2018年,中家网信办出台备案监管条例来源,很大一部分原因是,以太坊出来的内容有一部分删不掉,触发了监管层的思考。出现违法信息要及时删除,事实上很难做到。因为条例出台前后我也参与了一些调研,网信办委托我们做调研。后来我问到相关企业负责人的时候,其实他们后来对这个问题就释然了,原因是他们也明白信息存储和信息传播是两件事情。你家里可能藏着一个不合适的东西,如果你不进行传播,或者你不进行大范围传播,它可能带来的危害性非常低,这其实是两个层面的事情。信息传播其实是传统的监管,中心化的监管有非常强力的手段,无论中国还是美国或者其他地区,他们有能力切断传播信息。对于源头是不是百分之百确保没有或者可删除信息,其实没有当时那样紧张。 第二,刚才李总提到的很多介入性手段可能会实现,但是我不是特别担心这一点。监管层最终可能适应区块链这一点,发挥它积极的一面。包括互联网也是一样。监管层越来越了解区块链,利用区块链反洗钱等特点,跟去中心化合作得挺愉快的,也很有效。
毛必盛: 像网易、腾讯、阿里、犀牛凡涉及内容存储的互联网公司,国家对他们的数据存储监管非常严格。Filecoin将来被商用之后,虽然Filecoin是一个去中心化存储网络,但是Filecoin应该以一个个"中心化公司"来运营。在封存存储数据的时候,密封之前有一个类似于这种服务,把有问题的内容过滤掉。在检索时候,有些数据可能不在我们这边,从别的节点查到的,再给客户,这种中间会加一道过滤服务,把一些 健康 合规的数据反馈给终端。所以,从整个层面来看,监管这一块我觉得应该问题不大,因为对Filecoin来讲,矿商其实就是一家云存储服务商。
8.主持人: 我们展望下未来,你们对Filecoin发展有什么样的期待?
李昕: 首先,我觉得Filecoin刚起步。Filecoin是一个通用存储平台和一个去中心化平台,是一个很成功的试验。它是面向相对于未来的技术,未来有多远?有时候未来看20、30、50年,是不是还是Filecoin?我觉得不一定。Filecoin在整个 历史 过程当中会书写自己很重要一笔,方向完全没有错。目前我们所有的终端越来越强,处理能力和带宽越来越高,使得IPFS和Filecoin非常适合未来的应用。长期看来,Filecoin本身的愿景就是为未来人类信息文明承载一个平台。
商思林: Filecoin,就像移动互联网时代巨头,一定从一个新世界里面诞生一样,像谷歌,它一定不是说在PC时代诞生,一定在原生新世界里面诞生。美团看起来挺土,如果不是移动互联网,不是移动支付,不可能发展起来。我对Filecoin最大一个期待就是,它能够支撑区块链这个世界,真的去制造一个我们想象不到一个巨大的应用场景,超级这种去中心化,你可以说它是巨无霸,整个机制是去中心化。我现在其实也没法去预测应用和商业模式是什么。但是我觉得新的伟大东西一定在全新世界里面产生,到底跟中心化存储争多少份额,不是我现在最关心的。在未来10年以内,去中心化存储基础设施上能长出什么参天大树,这是非常期待的。
9.Tracy: 怎么参与到Filecoin这个赛道上面?挖矿还是技术?
李昕: 参与方式非常多,我现在希望有技术的人才进来,作为生态开发者,非常需要有很多服务和应用。因为Filecoin上线之后,后面有很多事情要做,有非常多的故事要讲,这个里面一定要把生态做起来。我们作为生态里面一员,非常希望看到这个东西做好。而且我们看到很多人参与进来,这是非常好的事情。普通人可以做小的投资,可以去买币、去享受红利。或者说你参与到挖矿里面,获得比较稳定一个收益。
商思林: 现在没法参与早期投资,我觉得在二级市场做一点你可以承受范围之内投资挺好,我很早说大家今年下半年绝对不可错过Filecoin。今年下半年不参与Filecoin,就像当时早期没有参与以太坊一样,只不过风险比较大。从投资角度来说挖矿还是比较合适,我们不能对挖矿幻想暴利,这个不现实。Filecoin鼓励你长期持有和运维,我觉得挖矿依然是一个选择。
毛必盛: 个人非常期待整个生态发展,因为现在基本上有500P数据,特别期待真实的数据提案出来之后,后面一些有效数据进来,再过半年或一年,可能整个生态里面有一些应用,包括Filecoin网络里面进来大量商用数据。我们可以做很多事情,除了挖矿本身。尤其目前质押币严重不足,一定有算力富余这种情况,可以基于硬件资源做这些事情。
目前Filecoin,包括整个机制,我觉得离商用还是有很大距离。我觉得将来Filecoin需要需把整个机制优化一下。检索是未来一个方向。
J. 谁有用C#开发的工具
1.Excle神器NPOI
NPOI 是 POI 项目的 .NET 版本。POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目。NPOI让.NET平台拥有了一个比较完善的读写Excel的工具。使用量非常广泛,应该是开源的.NET Excel读写工具中曝光度最高的一个吧,没有之一。
使用NPOI的优势有:完全免费使用,包含了大部分EXCEL的特性(单元格样式、数据格式、公式等等),支持处理的文件格式包括xls, xlsx, docx.采用面向接口的设计架构( 可以查看 NPOI.SS 的命名空间),同时支持文件的导入和导出,你不需要在服务器上安装微软的Office,可以避免版权问题。使用起来比Office PIA的API更加方便,更人性化。那么还等什么呢?下面就是我第一次使用NPOI做的一个日报表工具,里面的单元格合并都是在程序中动态完成的,过程很艰辛,但结果很美好,目前已经使用了2年,稳定无bug,非常给力啊。
官方网站:http://npoi.codeplex.com/
https://github.com/tonyqus/npoi
官方教程:http://www.npoi.info/
2.NPOI扩展—NPOI.CSS
NPOI.CSS是一个可以在使用NPOI时用类CSS的方法设置单元格样式的NPOI扩展,只支持.NET4及以上版本的项目。这个扩展是为了方便在使用的时候设置单元格及其相关格式样式,可以使用类似Css的方式,非常给力。看看下面的代码:
1
cell.CSS("color:red;font-weight:bold;font-size:11;font-name:宋体;border-type:thin;")
官方网站:https://github.com/qihangnet/npoi.css
3.yjinglee.office
yjinglee.office用于.Net平台下的Excel操作,主要封装NPOI对外提供更简单实用的API,提供以下功能点:
1.读取Excel数据转换成对象集合
2.写入集合到Excel,并提供可以Excel样式定义
看看一段读取Excel的代码:
1
2
3
4
5
6
7
8
9
10
var Reports = new Collection();
for (var i = 0; i < 10; i++)
{
Reports.Add(new Report {Id = i*100, Name = Guid.NewGuid().ToString()});
}
var excel = new Excel(new DefaultStyle());//创建Excel实例,可以传递不同的样式实例
excel.CreateSheet("Test");//创建一个Sheet,命名为Test
excel.WriteObject(Reports, 0, 0);//在Sheet0中的第0行写入集合
excel.SetColumnWidth(0, 0, new [] {5, 35});//在Sheet0的第0列开始依次设置列宽
excel.WriteFile(Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "demo.xlsx"));//保存文件
4.ExcelReport报表引擎
ExcelReport是一款基于NPOI开发的报表引擎组件。它基于关注点分离的理念,将数据与样式、格式分离。让模板承载样式、格式等NPOI不怎么擅长且实现繁琐的信息,结合NPOI对数据的处理的优点将Excel报表的生成化繁为简。同时,对报表组成的基本元素进行了抽象,进一步简化了Excel报表的生成过程。
官方网站:https://github.com/hanzhaoxin/ExcelReport
介绍文章:http://www.cnblogs.com/hanzhaoxin/p/4472860.html
5.Epplus
Epplus是一个使用Open Office XML(Xlsx)文件格式,读写Excel 2007/2010文件的开源组件。和NPOI相比,它更早的支持了Xlsx格式,而NPOI支持Excel 2003更好,现在新版本的NPOI也开始支持Xlsx了。所以他们两个还是有一点区别的。Epplus我没用过,但很早就听说了,也是使用非常官方的一个,目前也一直在更新。看大家的使用需求了。可以尝试一下。支持的范围也很广,例如:单元格合并,单元格样式,图表(这个NPOI目前还不是很好),表格,数据验证,公式,VBA等等。
官方网站:http://epplus.codeplex.com/
6.LinqToExcel
LinqToExcel是一个.NET平台下开源项目,它主要实现了LINQ的语法查询Excel电子表格。类型之前的LINQToXXX如果你是LINQ语法糖爱好者那最适合你。例如,下面代码,查询电子表格的头:
1
2
3
4
var excel = new ExcelQueryFactory("excelFileName");
var indianaCompanies = from c in excel.Worksheet<Company>()
where c.State == "IN"
select c;
官方网站:https://github.com/paulyoder/
7.NetOffice组件
NetOffice组件比较特别,是一个操作Office的强大组件,包括处理Office, Excel, Word, Outlook, PowerPoint, Access, Project, Visio等,所以支持非常全面。但是这个组件并不是完全单独写的,而是调用Microsoft Office的互操作程序集以及VSTO,也就是进行了一个深度的封装,从而让你不需要安装这些东西,只需要拷贝相应的程序集就可以了。目前一共包括16个操作的程序集。根据你的需要可以选择相应的程序集。它有几个优点:
1.没有Office的版本限制;
2.支持Office2000,2003,2007,2010,2013版本,就是支持全部Office的版本,足够强大;
3.支持版本之间的独立开发
4.操作语法和Microsoft的互操作程序集的语法是一样的;因此更加易于学习和使用;
5.如果你熟悉Office对象模型,你可以使用你现有的PIA代码,不需要重新学习;
6.优化了一些COM操作的代码
7.可以在.NET2.0及以上环境使用;
8.部署方便,不需要注册,没有依赖的程序集
其他的功能看官方文件介绍,如果有空,大家对这个需求强烈,可以写文章专门介绍。
官方网站:http://netoffice.codeplex.com/
8.Word文档读写工具Docx
DocX是一个以非常直观简单的方式操作Word 2007/2010文件的轻量级.NET组件。它的速度非常快,而且不需要安装微软的Office软件。在中国,免费并且小巧的WPS有足够的理由让很多用户放弃庞大的Office,那在实际软件开发过程中,这玩意就有用处了。遗憾是不支持2003,但总归是被淘汰的趋势,而且用WPS,也没有啥版本的区别。目前支持在文件中插入、删除和替代文本,支持所有的文本格式,如字体,下划线,高亮等;支持插入图片、超链接、表格、页眉页脚以及自定义属性等;支持类似JQuery的链式写法,很方便编程开发。
相比Excel来说,开源的操作Doc文档的组件比较少,这个组件只能勉强满足一些基本功能吧。遇到一些高级的,坑还是很多。但总的来说,常规支持是第一步吧,该项目目前也在更新中,期待更加完善。我在2013年曾经写过一篇介绍基本使用的文章:【原创】开源Word读写组件DocX介绍与入门
官方网站:http://docx.codeplex.com/
9.PDF处理组件PDFsharp
生成PDF文件格式的文档,大家肯定有想过,很多人项目中也肯定用过,方法、组件肯定有很多。但是.NET平台开源免费的不多,最好用的应该是ItextPDF,不过人家是非商业免费,所以我们就排除在外吧。看看免费的,这个PDFSharp是目前比较完善,而且还在持续更新的。支持功能有:
可以使用.NET编程语言动态创建PDF文档,
很容易使用对象模型来构建文档,
全部用C#重写设计和编写代码,
可以生成PDF文件和显示在窗体或者打印,
使用同一源文件,可以修改、合并或者分割PDF文件,
可以控制图片的透明度,嵌入了字体等等。支持总体算全面吧,不过没有亲自测试过。
官方网站:http://www.pdfsharp.net/
10.MigraDoc文档生成器
MigraDoc是一个.NET平台开源的文档生成器,几乎支持所有的文字处理功能。你只需要添加段落,表格,或者图表到节中,使用书签来创建链接,表格内容,索引等等。MigraDoc会自动进行分页和布局,可以生成PDF,XPS以及RTF文档格式。总的来说,是一个更简单类型的通用文档生成工具。它的官方网站和PDFsharp是一起的,目前也是在更新中。
官方网站:http://www.pdfsharp.net/
11.PdfReport报表工具
PdfReport 是一个支持code-first的报表引擎,建立在开源项目iTextSharp和 EPPlus基础上。支持.net 3.5以上,看看项目的一个图片:
官方网站:http://pdfreport.codeplex.com/
12.文件差异比较diffplex
diffplex是一个开源的C#文本差异比较软件。支持.NET 4.0, Silverlight 5.0, Windows 8.0, Windows Phone 8.0, Windows Phone Appx 8.1等环境。如下图所示:
官方网站:https://github.com/mmanela/diffplex
13.ReportGenerator
ReportGenerator可以将OpenCover, PartCover, Visual Studio 或者NCover生成的XML报表转换为可读性更加好的格式。上面这几个工具都是代码覆盖率分析工具。转换后的报表有以下格式:
1.HTML, HTMLSummary
2.XML, XMLSummary
3.Latex, LatexSummary
4.TextSummary
5.Custom reports
该组件目前一直在持续进行更新,对于专门做测试方面的人应该有些帮助,曾经也看到过文章使用这个组件来展示分析后的报表,不过不太懂,不去深究。
官方网站:https://github.com/danielpalme/ReportGenerator
14.BusyReports
BusyReports是一个非常方便的从SSRS Web 服务生成报表的应用程序。BusyReports提供了一个GUI界面,可以方便配置报表参数,电子邮件,文件路径等。这些配置信息存储在4个易于编辑的表格中。该组件与SQL Server数据驱动订阅类似,但删除了其中一些限制。该组件目前一直在更新。看下面的 GUI 配置界面:
官方网站:http://busyreports.codeplex.com/
15.Seal Report
Seal Report应该是上面这几个之中最好用,最常用的一个。它提供了一个完整的从其他任何数据库产生报表的架构。该产品主要关注于容易安装和报表设计,一旦安装好,报表很快就可以建立并且发布。该组件完全开源,使用C#语言编写。其主要特征有,1.动态SQL数据源:可以使用SQL或让Seal引擎构建动态SQL用于查询数据库,2.本地数据透视表:直接在数据透视表简单的拖放元素,并将它们显示在报表中,还支持HTML5图表等,详细去官网看看,下面看2张报表设计和报表结果的截图:
报表结果:
官方网站:http://sealreport.codeplex.com/