MySQL认为哪些数据量太大?

时间:2014-02-09 16:30:29

标签: mysql sql database postgresql

我正在寻找能够处理我的数据模型的免费SQL数据库。该项目是在没有任何复制的情况下在未连接到Internet的本地网络中工作的生产数据库。同时连接的应用程序数量将少于10个。

未来5年的数据量预测为:

  • 3个包含1亿行的表格
  • 2个5亿行的表格
  • 行数少于10k的20个表

我的第一个想法是使用MySQL,但我发现网络several articles说MySQL不是为大数据库而设计的。但是,在这种情况下,的含义是什么?

有人告诉我MySQL是否能够处理我的数据模型? 我读到Postgres将是一个不错的选择,但需要花费大量时间进行调整以提高大表的效率。

我不认为我的项目会使用NOSQL数据库。 我想知道是否有人有经验可以与MySQL分享。

更新

数据库将由C#软件(同时最多10个)和Web应用程序(2-3个同时)访问,

值得一提的是,只有很少会对大表进行更新,只需插入查询。删除语句只会在20个小表上进行几次。

大表经常用于select语句,但最常见的是知道条目是否存在,而不是返回分组和有序批量数据。

3 个答案:

答案 0 :(得分:21)

我为Percona工作,Percona是一家为MySQL解决方案提供咨询和其他服务的公司。

对于它的价值,我们与many customers合作,他们成功地将MySQL用于非常大的数据库。数据量为TB,数万个表,数十亿行的表,每秒数万个请求的事务负载。通过阅读我们的一些customer case studies,您可以获得更多洞察力。

您描述了表的数量和行数,但没有描述如何查询这些表。当然,人们只能以不能很好地扩展的方式查询只有几百行的表。但这可以说是任何数据库,而不仅仅是MySQL。

同样,人们可以以有效的方式查询大小为terrabytes的表。这一切都取决于你如何查询它。

您还必须为性能设定具体目标。如果您希望查询在几毫秒内运行,那么这对于高端硬件来说是具有挑战性的,但却是可行的。如果您的查询在几秒钟内运行就足够了,那么您可以对可扩展性更加轻松。

重点是MySQL在这些情况下不是一个限制因素,任何其他数据库选择都是一个制约因素。


重新评论。

MySQL的默认存储引擎InnoDB中有referential integrity checks。 “MySQL没有完整性检查”的说法是多年来经常重复的神话。

我认为你需要停止阅读有关MySQL的表面或过时的文章,并阅读一些更完整和最新的文档。

答案 1 :(得分:4)

MySQL有两个重要的(并且显着不同的)数据库引擎--MyISAM和InnoDB。限制取决于使用情况 - MyISAM是非事务性的 - 有相对快速的导入,但它太简单(没有自己的内存缓存)并且高于100MB的表上的JOIN可能很慢(由于过于简单的MySQL规划器 - 从5.6支持散列连接)。 InnoDB是事务性的,并且基于主键的操作非常快 - 但导入速度较慢。

当前版本的MySQL没有像Postgres那样好的规划器(有进步) - 因此复杂的查询通常在PostgreSQL上要好得多 - 而且真正简单的查询在MySQL上更好。

PostgreSQL配置的复杂性是神话。它比MySQL InnoDB配置简单得多 - 您只需设置五个参数:max_connection,shared_buffers,work_mem,maintenance_work_mem和effective_cache_size。几乎所有都与服务器上Postgres的可用内存有关。通常工作5分钟。根据我的经验,一个100GB的数据库通常在Postgres上没有任何问题(也可能在MySQL上)。有两个重要因素 - 您期望的速度,内存量和IO速度。

对于大型数据库,您必须具备任何数据库技术的经验和知识。当你在内存中时,一切都很快,当比率数据库大小/内存更高时,你需要做更多的工作才能获得好的结果。

答案 2 :(得分:1)

首先,MySQL的表大小仅受操作系统允许的文件大小限制的限制,即I。任何现代操作系统上的terra字节。这不会造成任何问题。最重要的是这样的问题:

  1. 你会跑什么样的疑问?
  2. 大型表记录是经常更新还是基本上是历史数据的存档?
  3. 您的硬件预算是多少?
  4. 您需要什么类型的查询速度?
  5. 您熟悉表分区,归档表,配置调优吗?
  6. 您需要多快写入(每秒预期的插入次数)
  7. 您将使用什么语言连接到数据库(Java,.net,Ruby等)
  8. 您最熟悉哪个平台?
  9. 您是否会运行可能导致表扫描的查询,例如'%something%',这些扫描必须经过每一行并永远占用
  10. MySQL,Facebook,谷歌,推特和其他拥有大型桌子的人使用,而且100,000,000在社交媒体时代并不多。 MySQL几乎没有什么缺点(尽管我在大多数情况下更喜欢postgresql),例如通过添加新索引来改变大型表。如果您在此期间没有复制品,这可能会让您的公司在几天内被迫休假。 NoSQL不是一个选择的原因吗?有时混合方法是一个很好的选择,例如在MySQL中使用关系业务逻辑和在MongoDb之类的NoSQL数据库中的大型统计表,可以通过在几分钟内添加新服务器来扩展(MySQL也可以,但它更复杂)。现在MongoDB可以有一个索引列,可以以极快的速度搜索。 最重要的是:您需要首先回答上述问题,以做出明智的决定。如果你有庞大的表,只搜索索引键几乎任何数据库都可以 - 如果你期望对结构进行很多更改,你想要使用不同的方法。

    编辑: 根据你发布的更新,我怀疑你会遇到问题。