我正在编写一个存储数据的代码,并希望存储10亿到100亿个记录,甚至更多。对此,最重要的是速度(每秒将近10000到20000个记录)、空间使用和防碰撞。现在,我一直在使用MySQL的MyISAM,它运行得非常快,并且与我们所需的速度相匹配。MyISAM还具有最佳的空间利用率,MySQL数据文件夹中的数据库文件几乎等于我插入的数据量,例如,对于100000条记录,每个记录30个字符,只需3MB。但唯一的问题是,它不是酸性的,并可能造成数据损失的崩溃。
因此,我想知道任何替代方案(我甚至不介意将数据库软件改为任何其他软件),这可以帮助我们存储这么多数据并快速存储它们。
我已经尝试过MySQL INNODB,它的插入非常慢。我只能达到每秒800到1000次的记录。另外,INNODB中存储数据的空间也相当大。存储相同的100000条记录需要将近8MB,每个记录有30个字符。
我也尝试过MongoDB作为一种替代方法,但是它同样需要太多的空间来存储相同的数据。
即使是SQLITE3 DB也非常缓慢地编写100000条记录。我用PHP在for循环中尝试了这一点。它还漏掉了大约20条记录,造成数据库不可用的错误。
因此,我想知道任何开源数据库软件,可以满足我的要求。我听说MariaDBs是符合酸性的。是真的吗?或者PostgreSQL也是一个很好的快速选择,具有最佳的空间利用率。
我是开放的任何解决办法,是快速,利用最优空间,也是碰撞的证明。期待收到答复。
===在MariaDB Aria ===上的更新在插入速度和空间方面甚至比InnoDB差。插入相同数据所花费的时间是InnoDB的1.5倍,是MyISAM使用的空间的近2.5倍。
发布于 2012-07-31 08:33:24
这不是任何人都能在5分钟内百分之百地“钉”的那种东西,但是如果你想要持续地达到那样的性能和功能水平,那么我强烈怀疑你将不得不花钱。
如果您有这方面的预算,那么我希望将甲骨文的“TimesTen”引擎结合起来,可能与企业SSD或PCIe Flash (如FusionIO)结合使用,如果您这么做的话,我建议您使用英特尔的XeonE7-xxxx系列,因为它们具有出色的RRAS功能,以便在发生故障时尽可能长时间地保持服务器正常运行。
发布于 2012-07-31 08:53:32
如果获得更多的特性和更好的性能只是一个使用不同软件的问题,那么每个人都会这么做(至少少数人还在it领域工作);
如果您需要酸支持-那么为什么要尝试mongoDB?
如果您在硬件上花费了足够多的钱,并且对系统进行了适当的调优,那么您就很有可能获得您想要的吞吐量(但是myisam更快)。但是,您的第一个限制是尽量减少空间使用,这意味着您没有足够的预算去购买SSD RAID集。
可能导致崩溃时的数据丢失。
我在甲骨文和Sybase的崩溃中看到了数据的损失--但理论上说,这应该会更有效。我通常会花一些时间,精力和金钱来避免崩溃的第一(专用服务器,使用合理的质量硬件,UPS,稳定的软件)。
即使是SQLITE3 DB也非常慢。
SQLite对底层文件系统特别敏感(但这将影响所有数据库)。您没有提到哪个文件系统(甚至哪个操作系统!)这让我觉得你并没有花很多时间来调整安装。
如果是我的话,我会看看MariaDB --它是mysql的一个分支,包括一个改进的ISAM (阿里亚),它具有一些性能优势并支持事务处理。(在linux上运行,使用没有障碍的xfs和截止日期调度程序)。
但是你需要看看你的硬件才能让它飞起来。
发布于 2012-07-31 10:12:02
根据我的经验,InnoDB (如果配置和使用得当)只比MyISAM慢一点(当然不是数量级)。为了提高绩效,我想到了几个建议:
您可以在这里找到很好的指示:
https://serverfault.com/questions/412774
复制相似问题