数据流
快速产生的大量数据,如输出数据源(feed),需要高效地存储,普通文件系统会限制文件大小,需要为数据溢出设计特殊的处理程序,要以牺牲数据完整性和可靠性为代价,由于这种类型的数据通常包含特权或敏感的信息,必须在运行时实现快速加密,同样,数据压缩效率也很重要,因为这些数据源的大小通常是很重要的。
1、普通文件不适合存储这种类型的数据,快速增长的文件大小需要创建许多中间缓存文件,即使进行了精心设计,内存或媒体的消耗也会呈几何级增长,处理、索引、搜索和加密存储在普通文件中的数据流将会成为噩梦。
2、用关系数据库存储数据流和普通文件面临的问题一样,加上数据库更新的效率很低,结构严格,因此关系数据库可能是最不适合用来存储流数据的存储解决方案。
3、仅当需要高度安全的时候,数据库适合存储数据流,但需要以快速搜索为代价,数据可以被压缩,但想要实现快速的搜索几乎是不可能的。
4、结构化存储在安全,效率和数据完整性方面均有优势,数据存储是单个自治的文件单元,可以轻松实现转移或复制,访问简单而高效,保存在其中的数据流可以加密,能有效预防被篡改,分区为存储用户提供了另一个方便,存储将会根据数据大小自动增长。
5、远程和分布式存储也很适合存储数据流,通常在产生大量数据的项目中会这么使用,由于这些数据经常被分布式系统或集群分析,使用远程存储是最合适的,这种存储不仅提供了方便,还可以很好地控制数据访问,能有效地阻击恶意篡改或删除数据。
文档
文档通常是结构严谨的数据类型,特别是那些存储人类可读的文本或图像信息的文档,在企业和个人活动中,文档是信息存储最常见的一种形式。
1、文件是存储文档最常见的一种形式,但当需要并发访问同一个文档时,使用普通文件就很复杂了,因为所有混合的文档结构都是连续存储在一个平面文件中的,任何对文档的修改操作都需要创建一个临时文件,它包含了所编辑文档元素的一个子集。此外,删除文档中的任何元素不会自动减少文件大小,如果想优化文件大小,必须创建一个文档副本,然后保存为另一个文件,等编辑操作完成后,源文件必须删除。
2、关系数据库也可以用来存储某些类型的文档,如果在运行时能转换成明文文本,将可以提供高效的索引和搜索。但数据库也有同质数据阵列存储一样的缺点。
3、结构化自定义存储是企业文档存储最好的选择,它的主要优点是允许向现有存储高效地添加或删除文档或文档中的部分内容,同时能够提供高效的文档访问限制,复杂文档(包括嵌入的图像或其它多媒体数据)可以通过其包含的文本内容进行简单的处理,这样将会减少载入/保存时间,让文本搜索变得更简单,与此同时,在发生故障后日志可以保证其可恢复(完全或部分恢复)。还有一个好处是可以在文档内存储多个版本,其缺点是搜索速度很慢,运行时应该转换成明文,这样才能提高检索效率。
4、zip文件使用某些文件格式,如开放文档格式存储文档数据,但修改和删除信息将非常耗时,有时甚至需要完全重写文件,同时,zip文件格式不允许你在其中添加元数据,zip加密功能有限的(最近在标准中加入了强AES加密,但许多zip压缩和解压工具尚不支持它)。
5、远程和分布式存储日益普及和流行,在文档创建和使用时更易于协作,其缺点和前面几个一样。
建议的解决方案
在软件设计领域,选择正确的工具非常重要,但不正确的数据存储规划可能会导致灾难性后果。
1、使用文件时,你要面对的是文件系统的选择。
2、使用数据库时,有很多的商业数据库可选择,Oracle,DB2等,也有开源的解决方案可供选择。
3、存储仓库可以由商业或公共归档解决方案创建,如zip等。
4、结构化存储的例子包括微软的OLE结构化存储(提供基本的存储功能,无加密,压缩和搜索功能),EldoS提供的Solid文件系统等。
5、EldoS的Solid文件系统和Callback文件系统,以及基于Unix系统的FUSE,可以提供远程存储。
在任何情况下,只有项目开发人员知道准确的需求和了解所有需要的技术,以及它们的功能和限制,因此他们可以为软件项目的成功实施选择正确的工具。