MySQL是否适合具有3.5米+行的读取大量数据库?如果是这样,哪个发动机?

Bra*_*all 5 mysql django postgresql

我对数据库的经验是使用相当小的Web应用程序,但现在我正在处理整个州的选民信息数据集.有大约350万选民,我需要根据他们的地址,投票历史,年龄等进行相当多的报道.网络应用程序本身将用Django编写,所以我有一些数据库选择,包括MySQL和PostgreSQL.

在过去,我几乎完全使用MySQL,因为它很容易获得.我意识到表中的3.5米行并不是真的那么多,但它是我个人使用过的最大的数据集,所以我不在我个人的舒适区.此外,这个项目不是一个快速丢弃的应用程序,所以我想确保我选择最适合工作的数据库而不仅仅是我最熟悉的数据库.

如果MySQL是适合这项工作的工具,我也想知道使用InnoDB或MyISAM是否合理.我理解两者之间的基本差异,但是有些消息来源说使用MyISAM来提高速度,但是如果你想要一个"真正的"数据库则使用InnoDB,而其他人则说MySQL的所有现代用途都应该使用InnoDB.

谢谢!

Tim*_*and 7

我在mysql上运行的DB比这个大得多 - 你应该没问题.只需仔细调整索引.

InnoDB支持更好的锁定语义,因此如果偶尔或频繁写入(或者如果你想要更好的数据完整性),我建议从那里开始,然后在你无法达到性能目标的情况下对myisam进行基准测试.

  • 在创建索引时,在插入时会增加额外的开销(不多,只是一点点,但它会增加).如果你索引所有内容,那么它可以真正减慢速度.索引可以基于单个字段,字段的前N个字节(或字符),或两个或多个字段.您需要使用"解释查询"工具并对系统进行基准测试,以确定特定数据集和通常运行的搜索的最佳组合.请查看mysql文档:http://dev.mysql.com/doc/refman/5.0/en/create-index.html了解更多信息. (3认同)

Gre*_*ith 6

MyISAM只有在你需要速度如此之快以至于你愿意接受许多数据完整性问题的缺点才能实现它时才有意义.你可以在任何不干净的关机时结束数据库损坏,没有外键,没有交易,它真的有限.而且,由于现代硬件上的350万行是一个简单的数据集(除非你的行很大),你肯定不会因为没有其他方法来达到性能而无法优化性能而不是可靠性.目标 - 这是你应该忍受MyISAM的唯一情况.

至于是否选择PostgreSQL,你不会真正看到两者在这么小的应用程序之间的巨大性能差异.如果你已经熟悉了MySQL,你肯定可以再次使用它来证明你的学习曲线.

我不喜欢MySQL,因为有很多方法可以将糟糕的数据输入数据库,而PostgreSQL不能容忍这种行为(请参阅比较速度和可靠性),糟糕的MyISAM行为只是其中一部分问题.鉴于现在MySQL社区有多么破碎以及Oracle将如何处理它的不确定性,你可能要考虑看​​看PostgreSQL,以便将来在这里有更多的选择.最近总是免费获得BSD许可的PostgreSQL,并没有太多的戏剧性,而且至少整个开发社区的规模较小,它正朝着同一个方向发展.