Mysql 以每秒70000条记录的速度写入大数据量怎么样?

Mysql 以每秒70000条记录的速度写入大数据量怎么样?,mysql,parallel-processing,volume,Mysql,Parallel Processing,Volume,也许有人可以就这一点发表看法?我目前正在寻找一种解决方案,每天将5亿到40亿条记录存储到数据库中的一个(或2个)表中,最低写入速率为每秒70000条记录。一条记录包含大约30个变量。我们希望每小时以并行方式加载数据(数据是分区的),直到机器在CPU、内存和IO方面达到最大容量。在编写过程中,查询必须是可能的,并且在编写操作期间,查询的性能应保持在可接受的水平 我一直在浏览网页,看看是否有其他人试图将这些数量并行写入MySQL数据库,但没有发现任何具体内容。大多数人关注每秒的事务,但这不是我们在这

也许有人可以就这一点发表看法?我目前正在寻找一种解决方案,每天将5亿到40亿条记录存储到数据库中的一个(或2个)表中,最低写入速率为每秒70000条记录。一条记录包含大约30个变量。我们希望每小时以并行方式加载数据(数据是分区的),直到机器在CPU、内存和IO方面达到最大容量。在编写过程中,查询必须是可能的,并且在编写操作期间,查询的性能应保持在可接受的水平

我一直在浏览网页,看看是否有其他人试图将这些数量并行写入MySQL数据库,但没有发现任何具体内容。大多数人关注每秒的事务,但这不是我们在这里讨论的。我们正在加载原始数据,我们需要快速、并行和零停机时间(即用户必须能够查询可用数据)。是否值得研究MySQL来做这项工作,或者如果我们不在硬件上花费巨量(您认为什么?),我们是否应该考虑它?p> 注意:通过多核64位128GB服务器中提供的GBit FC进行SAN存储时,Diskspace没有问题。我不是在寻找详细的技术解决方案,而是从专家的角度来看可行性,也许有一些提示/提示可以为我指明正确的方向

欣赏你的见解


针对评论:

每个记录单独计数,每个变量都是可能的候选搜索条件。更多信息:

  • 昨天和以前的数据(最多10d)必须是可查询的(SQL非常简单)
  • 数据访问最好不要通过自定义API,更喜欢开放标准,如ODBC或客户端(如Oracle客户端)
  • 数据消耗包括汇总(在午夜之后,部分也包括每小时一次,统计数据涉及最小值/最大值/平均值)和存储在更高级别的历史记录表中,以供最终用户报告。以及前面提到的为问题/特殊分析搜索原始数据
  • 在10天周期结束时,需要很容易地删除一整天的数据
  • 再强调一次:写作每小时进行一次,以跟上交付进度,而不是为午夜总结创建积压,不能拖延太久
  • 搜索结果不需要是即时的,但最好不要超过+15分钟,整个10天的容量=3000亿条记录

有了这么多的数据,我认为您应该尝试研究NoSQL(MongoDB、Cassandra、HBase等)。使用MySQL,您必须大量扩展服务器。我们尝试每秒进行1200次插入,但MySQL失败(或硬件失败)。解决方案是使用XCache(memcached当时也失败了)。试试看NoSQL,你会喜欢的。

4B行x30x4字节大约是每天1/2TB。我认为您无法将其保存在一台机器中,而且您的SAN可能也有问题。我会看看Cassandra,因为它是为高写容量而构建的

如果我是你,我会将解决方案分为数据捕获和数据分析服务器;这是一种相当常见的模式。查询和报告针对您的数据仓库运行(您可以在数据仓库中使用与数据收集系统不同的模式)。您可以使用ETL(提取、转换、加载)过程将数据加载到数据仓库中,在您的情况下,这可能非常简单

至于如何支持每秒70K次写入—我想说,这远远超出了大多数RDBMS服务器的能力,除非您有专门的团队和基础设施。这不是你想在工作中学习的东西


NoSQL似乎是更好的匹配

也许你应该在serverfault.com上问这个问题。谢谢,我也会去看看。这是每天40亿美元的一次性费用,还是你计划在未来几年使用这样的系统?单台服务器无法在此处进行剪切,常规数据库设置也无法进行剪切。您必须通过代理来拆分读取和写入,但是设置必须使您有一台专用机器,只处理整个数据集的一部分。这听起来像是很多定制工作,或者你应该看看Hadoop——一个用于分布式计算的Map/Reduce框架。。。。。解决方案:每天将5亿到40亿条记录存储到数据库中的单个(或2个)表中,最低写入速率为每秒70.000条记录。如果我们同意每天有86400秒,那么每天存储40亿行将需要每秒超过46000行/记录的写入速率。如何计算每秒70次写入?谢谢。这给了我3个解决方案需要研究,这也增加了我在内部收到的关于MySQL的拒绝。我同意你@donis的观点,因为大量的数据“关系数据库”是不适当的,Cassandra,不过,建议使用NoSQL。@MArtin-还有其他解决方案:如果使用PHP,可以使用XCache缓存数据(因为它有缓存列表函数),然后使用后台作业将数据转储到MySQL。这取决于您是立即需要数据还是可以稍等。给我们更多信息-也许答案会更清楚。NoSQL没有事务支持。如果要求实际写入每个记录,NoSQL不会剪切它。还有搜索和使用数据的问题,那部分根本没有提到。这种容量的数据集很难搜索,特别是当您需要使用所提到的所有30个变量作为条件时。@Michael J.V.一些NoSQL解决方案允许您要求写入数据。如果您不需要事务,请参阅它不超出RDBMS服务器的功能。如果您使用Fusion IO驱动器,也可以实现快速写入、事务以及RDBMS提供的所有其他美好事物,而NoSQLs没有。是的,这就是“除非”点的含义。你可以做到,但这是不可能的