数据库与平面文件
我工作的公司正试图将使用平面文件格式的产品转换为数据库格式。 我们正在处理相当大的数据文件(即:25GB /文件),他们得到更新非常快。 我们需要运行随机访问数据的查询以及连续的方式。 我试图说服他们使用数据库的优点,但是我的一些同事似乎不愿意这样做。 所以我想知道你们是否能够帮助我解决为什么要使用数据库的原因或链接,或者至less弄清楚为什么平面文件更好(如果是的话)。
- 数据库可以处理查询任务,因此您不必手动查看文件。 数据库可以处理非常复杂的查询。
- 数据库可以处理索引任务,所以如果像使用id = x的get record这样的任务可以非常快
- 数据库可以处理多进程/multithreading访问。
- 数据库可以处理来自networking的访问
- 数据库可以监视数据的完整性
- 数据库可以轻松更新数据(请参阅1))
- 数据库是可靠的
- 数据库可以处理事务和并发访问
- 数据库+ ORM让您以非常程序员友好的方式操作数据。
这是我前一段时间已经给出的答案 :
这完全取决于领域特定的应用程序需求。 很多时候,直接的文本文件/二进制文件访问可以是非常快速,高效的,以及为您提供所有文件访问能力的操作系统的文件系统。
此外,您的编程语言很可能已经有一个内置的模块(或者很容易创build一个)用于特定的parsing。
如果你需要的是很多的附加(INSERTS?)和顺序的/很less的访问,很less/没有并发,文件是要走的路。
另一方面,当你对并发,非顺序读/写,primefaces性,primefaces许可,你的数据是关系的性质等要求,你会更好closures或面向对象数据库。
使用SQLite3可以实现很多function, SQLite3非常轻巧(小于300kb),兼容ACID,用C / C ++编写,并且非常普遍(如果它尚未包含在您的编程语言中,例如Python,当然有一个可用)。 即使对于大小为140 TB的db文件或128 tebibytes( 链接到数据库大小 ),它也可能是有用的。
如果你的要求比较大,甚至不会讨论,那就select一个全面的RDBMS。
正如你在评论中所说“系统”只是一堆脚本,那么你应该看看pgbash 。
如果可以购买,不要build立它。
我最近听到这句话,看起来真的很适合作为指导。 问问你自己这…在你的应用程序的文件处理部分上花了多less时间? 我怀疑花了相当多的时间来优化这个代码的性能。 如果您一直在使用关系数据库,那么您将花费大量的时间来处理这部分应用程序。 你应该有更多的时间来真正的“业务”方面的应用程序。
数据库一路。
但是,如果您仍然需要存储文件,那么就没有能力采用新的RDBMS(如Oracle,SQLServer等),而不是查看XML。
XML是一种结构文件格式,它提供了将文件存储为文件的能力,但是可以为文件和数据提供查询能力。 XML文件比平面文件更容易阅读,并且可以使用XSLT进行轻松转换,以实现更好的人类可读性。 如果必须,XML也是传输数据的好方法。
我强烈build议一个数据库,但如果你不能走这条路线,那么XML就是好的一个。
非关系型(NoSQL)数据库如亚马逊的SimpleDB,Tokio Cabinet等呢? 我听说Google,Facebook,LinkedIn正在使用这些来存储他们庞大的数据集。
你能告诉我们,如果你的数据是结构化的,如果你的模式是固定的,如果你需要简单的可复制性,访问时间是重要的,等等?
SQL即席查询function对我来说是足够的。 在表格上有一个很好的模式和索引,这是快速和有效的,将有良好的性能。
什么types的文件没有提到。 如果他们是媒体文件,请继续使用平面文件。 你可能只需要一个数据库的标签和一些方法来将“外部BLOB”与DB中的logging相关联。 但如果全文search是你需要的东西,没有其他的方法去,但迁移到一个完整的数据库。
另一件事,就文件数量而言,你的文件系统可能会提供上限。
他们更快; 除非将整个平面文件加载到内存中,否则数据库几乎可以在所有情况下更快地访问。
他们更安全; 数据库更容易安全备份; 他们有检查文件损坏的机制,哪些平面文件没有。 一旦你的平面文件中的腐败迁移到你的备份,你就完成了,你甚至可能不知道它。
他们有更多的function; 数据库可以允许许多用户同时读/写。
一旦安装完成,他们的工作就不复杂了。
除非每次启动时将文件加载到内存中,否则请使用数据库。 就那么简单。
假设您的学院已经有了处理文件查询的程序。 如果不是,那么使用数据库。