首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >快速数据库存储10亿条记录

快速数据库存储10亿条记录
EN

Server Fault用户
提问于 2012-07-31 08:21:49
回答 4查看 15.8K关注 0票数 2

我正在编写一个存储数据的代码,并希望存储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倍。

EN

回答 4

Server Fault用户

发布于 2012-07-31 08:33:24

这不是任何人都能在5分钟内百分之百地“钉”的那种东西,但是如果你想要持续地达到那样的性能和功能水平,那么我强烈怀疑你将不得不花钱。

如果您有这方面的预算,那么我希望将甲骨文的“TimesTen”引擎结合起来,可能与企业SSD或PCIe Flash (如FusionIO)结合使用,如果您这么做的话,我建议您使用英特尔的XeonE7-xxxx系列,因为它们具有出色的RRAS功能,以便在发生故障时尽可能长时间地保持服务器正常运行。

票数 7
EN

Server Fault用户

发布于 2012-07-31 08:53:32

如果获得更多的特性和更好的性能只是一个使用不同软件的问题,那么每个人都会这么做(至少少数人还在it领域工作);

如果您需要酸支持-那么为什么要尝试mongoDB?

如果您在硬件上花费了足够多的钱,并且对系统进行了适当的调优,那么您就很有可能获得您想要的吞吐量(但是myisam更快)。但是,您的第一个限制是尽量减少空间使用,这意味着您没有足够的预算去购买SSD RAID集。

可能导致崩溃时的数据丢失。

我在甲骨文和Sybase的崩溃中看到了数据的损失--但理论上说,这应该会更有效。我通常会花一些时间,精力和金钱来避免崩溃的第一(专用服务器,使用合理的质量硬件,UPS,稳定的软件)。

即使是SQLITE3 DB也非常慢。

SQLite对底层文件系统特别敏感(但这将影响所有数据库)。您没有提到哪个文件系统(甚至哪个操作系统!)这让我觉得你并没有花很多时间来调整安装。

如果是我的话,我会看看MariaDB --它是mysql的一个分支,包括一个改进的ISAM (阿里亚),它具有一些性能优势并支持事务处理。(在linux上运行,使用没有障碍的xfs和截止日期调度程序)。

但是你需要看看你的硬件才能让它飞起来。

票数 3
EN

Server Fault用户

发布于 2012-07-31 10:12:02

根据我的经验,InnoDB (如果配置和使用得当)只比MyISAM慢一点(当然不是数量级)。为了提高绩效,我想到了几个建议:

  • 您应该使用MySQL InnoDB存储引擎的最新版本。
  • 您应该使用较大的缓冲池大小(大约80%可用RAM)和一个较大的日志文件大小。
  • 您应该使用事务和批处理插入来获得高吞吐量。批次大小是一个重要的性能因素(不太小,但也不太大)。
  • 您应该使用AUTOINCREMENT id作为主键。任何索引都会降低插入速度,特别是唯一的。
  • 您应该使用适用于您的最低事务隔离级别。
  • 为您的系统调优innodb_flush_method。
  • 如果不需要完全的ACID保证,请考虑更改innodb_flush_logs_at_trx_commit的值
  • 使用适当的硬件,调整OS/存储/文件系统

您可以在这里找到很好的指示:

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/412774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档