我所工作的公司正在尝试将使用平面文件格式的产品切换为数据库格式。我们正在处理相当大的数据文件(即:25GB /文件),并且它们可以非常快速地更新。我们需要运行随机访问数据的查询,以及连续的方式。我试图说服他们使用数据库的优势,但我的一些同事似乎不愿意这样做。所以我想知道你们是否可以通过一些理由或链接来解释我们为什么要使用数据库的帖子,或者至少澄清为什么平面文件更好(如果有的话)。
答案 0 :(得分:86)
答案 1 :(得分:39)
前一段时间是an answer I've already given:
完全取决于 特定领域的应用程序需求。一个 很多时候直接文本文件/二进制文件 文件访问速度非常快, 高效,并为您提供 所有的文件访问功能 你的操作系统的文件系统。
此外,您的编程语言 很可能已经内置了 模块(或很容易制作) 特定的解析。
如果您需要的是许多追加 (INSERTS?)和顺序/少数访问 很少/没有并发,文件是 要走的路。
另一方面,当你的 并发要求, 非顺序读/写 原子性,原子权限,你的 数据是由性质等关系的, 你会好起来的 关系或OO数据库。
有很多可以 用SQLite3完成 非常轻(低于300kb),ACID 兼容,用C / C ++编写,和 无处不在(如果还没有 包含在您的编程语言中 - 例如Python-,肯定有一个可用)。它甚至可以是有用的 在db文件上可能有140 TB或128 tebibytes(Link to Database Size) 更多。
如果您的要求更大, 甚至都没有讨论, 寻找一个成熟的RDBMS。
正如你在评论中所说“系统”只是一堆脚本,那么你应该看看pgbash。
答案 2 :(得分:6)
如果你可以买它,不要建造它。
我最近听到这句话,它似乎很适合作为指导。问自己这个...花了多少时间处理你的应用程序的文件处理部分?我怀疑在优化此代码以获得性能方面花费了相当多的时间。如果您一直使用关系数据库,那么处理这部分应用程序的时间会少得多。您可以有更多时间来实现应用的真正“业务”方面。
答案 3 :(得分:5)
他们更快;除非您将整个平面文件加载到内存中,否则数据库几乎可以在所有情况下都能更快地访问。
他们更安全;数据库更容易安全备份;他们有检查文件损坏的机制,而平面文件则没有。一旦您的平面文件中的损坏迁移到您的备份,您就完成了,您甚至可能都不知道它。
他们有更多功能;数据库可以允许许多用户同时读/写。
一旦设置完毕,它们就不那么复杂了。
答案 4 :(得分:3)
Databases一路走来。
但是,如果您仍然需要存储文件,那么除了查看XML之外,还没有能力使用新的RDBMS(如Oracle,SQLServer等)。
XML是一种结构文件格式,它使您能够将事物存储为文件,但可以让您查询文件中的文件和数据。 XML文件比平面文件更容易阅读,并且可以使用XSLT轻松转换,以获得更好的人类可读性。如果必须,XML也是传输数据的好方法。
我强烈建议使用数据库,但如果你不能走这条路,那么XML就是第二个。
答案 5 :(得分:3)
如亚马逊的SimpleDB,Tokio Cabinet等非关系型(NoSQL)数据库怎么样?我听说Google,Facebook,LinkedIn正在使用这些来存储他们庞大的数据集。
您能告诉我们您的数据是否是结构化的,您的架构是否已修复,是否需要易于复制,访问时间是否重要等等?
答案 6 :(得分:2)
SQL即席查询功能对我来说已经足够了。通过在表格上使用良好的模式和索引,这是快速有效的,并且具有良好的性能。
答案 7 :(得分:2)
未提及哪些类型的文件。如果它们是媒体文件,请继续使用平面文件。您可能只需要一个用于标记的数据库,并将“外部BLOB”与数据库中的记录相关联。但是如果你需要全文搜索,那么除了迁移到完整的数据库之外别无选择。
另一方面,就物理文件的数量而言,您的文件系统可能提供上限。
答案 8 :(得分:2)
除非每次启动时将文件加载到内存中,否则请使用数据库。就这么简单。
假设您的大学已经拥有处理文件查询的程序。如果没有,那么使用数据库。
答案 9 :(得分:1)
数据库和平面文件之间的区别如下:
数据库提供了更大的灵活性,而平面文件提供的灵活性较低。
数据库系统提供数据一致性,而平面文件无法提供数据一致性。
数据库支持DML和DDL,而平面文件不支持这些。
数据库中的数据冗余更少,而平面文件中的数据冗余更多。