我获得了15 x 1亿32字节的记录。只需要顺序访问和追加。关键是龙。值是元组 - (日期,双精度,双精度)。这宇宙中有什么东西可以做到这一点吗?我愿意为这些1亿条记录中的每条记录提供15个单独的数据库(sql / nosql)或文件。我只有一个i7内核和8 GB RAM和2 TB硬盘。
我尝试过使用Protostuff编码的PostgreSQL,MySQL,Kyoto Cabinet(带微调)。
SQL DB(带索引)需要永远进行最愚蠢的查询。
京都内阁的B-Tree可以处理多达1500万到1,800万条记录,超出这些记录将永久保留。
我厌倦了以至于我想回到awk + CSV,我记得曾经为这类数据工作过。
答案 0 :(得分:2)
如果你的场景意味着总是按顺序遍历所有记录,那么使用数据库可能会有些过分。如果您开始需要随机查找,替换/删除记录或检查新记录是否与旧记录重复,则数据库引擎会更有意义。
对于顺序访问,一些文本文件或手工制作的二进制文件将更容易处理。你听起来像一个开发人员 - 我可能会采用自己的二进制格式,并在内存映射文件的帮助下访问它,以提高顺序读取/追加速度。没有缓存,只是一个读取数据的滑动窗口。我认为它会比任何DB都更好,甚至在通常的硬件上也能表现得更好;我曾做过一次这样的数据分析。它也比唤醒CSV文件更快;但是,首先,我不确定开发二进制存储的工作量是否满足。
只要数据库变得有趣,您就可以查看MongoDB和CouchDB。它们用于存储和提供非常大量数据。 (有一个flattering evaluation将其中一个与传统数据库进行比较。)数据库通常需要合理的硬件功能才能更好地运行;也许你可以看看这两者对你的数据有何影响。
---费达
答案 1 :(得分:1)
Ferdinand Prantl的回答非常好。两点:
答案 2 :(得分:1)
对于顺序读取和写入,leveldb将很好地处理您的数据集。
答案 3 :(得分:0)
我认为在一个表格中大约有48个数据。
当你进入大型数据库时,你必须以不同的方式看待事物。使用普通数据库(例如,表格少于几百万行),您可以做任何事情作为概念证明。即使你对SQL数据库,服务器调优和硬件调优一无所知,你提出的答案可能也是正确的。 (虽然有时你可能出于错误的原因。)
大型数据库通常不会这样。
不幸的是,你不能直接在未经调整的PostgreSQL服务器上抛出15亿行,运行几个查询,并说“PostgreSQL无法处理这个问题。”大多数SQL dbms都有处理大量数据的方法,大多数人对它们了解不多。
以下是我必须长期处理大量数据时需要考虑的一些事项。 (短期或一次性处理,通常不值得关注速度。许多公司不会投资更多RAM或十几个高速磁盘 - 甚至是几个SSD - 甚至一个长期的解决方案,更不用说一次性工作了。)
我确定还有其他人,但我还没喝咖啡。
但关键是你无法确定PostgreSQL是否可以处理48 gig表,除非你已经考虑了所有这些优化的效果。对于大型数据库,您可以依靠小改进的累积效果。您必须先进行大量测试,然后才能确定某个给定的dbms无法处理48个gig表。
现在,您是否可以实施这些优化是一个不同的问题 - 大多数公司都不会投资运行Oracle的新64位服务器以及最新的十几个“我是最快的硬盘“硬盘驱动器来解决您的问题。
但某人 要为最佳硬件和软件,dba调整专业知识,或程序员时间以及等待次优硬件付费。我已经看到这样的问题需要数月才能解决。如果需要几个月的时间,硬件上的资金可能是一项明智的投资。