有没有办法让mysql处理大量的并发写入?

时间:2012-02-20 03:47:01

标签: mysql database hbase

我被困在一块岩石和一块坚硬的地方,正在制作一个应用程序。基本上,程序会生成一个非常大的数据集(它超过10次演出并超出服务器上的内存,以后很难将此数据集从字典传输到其他服务器)。我决定使用数据库存储数据,但遇到了一个问题,因为我产生了更多的进程,他们不使用超过10%的可用内核,但mysql服务总是大约60-100%。

使用mysql的核心运行在60-100%之间。我已经学习了基本的mysql课程,但我不是专家,我真的只是用它来存储/分发程序的局部变量。有关如何排除故障或甚至可以解决此问题的任何建议?我有一个想法是虽然我的内存无法存储我打算编写的整个数据库,但我希望服务器使用一些内存来处理一些请求,然后在内存满了时编写它们(现在mysql使用的内存少于1)服务器内存的百分比。)

如果你知道我的目标,我对任何特定类型的系统都没有效忠,所以如果mysql不是一个好的解决方案,我很乐意尝试另一种工具(我打算使用hbase,但是先走下mysql之路)。如果还有其他更好的事情请告诉我。

2 个答案:

答案 0 :(得分:1)

这一切都取决于你实际上要做什么,但是你需要提供更多信息才能获得好的建议。

大量写作是什么意思? 10? 100? 1000?每秒?

您尝试写入的架构是什么?架构上实现了哪些索引?

你是否有大量的写入读取或这是所有写入?

你在写作期间做了什么?它是您正在编写的单行还是包含在事务中的许多操作?

什么是服务器配置?记忆?磁盘? mySQL的版本。

您是否将Innodb用于数据库?

现在您可以尝试的一件事是运行SHOW FULL PROCESSLIST;。这将显示是否存在某种类型的锁定 - 如果您看到许多进程处于锁定状态,则查找其中一个未锁定的进程并查看是否可能导致锁定。有关此命令的更多信息,请参阅http://dev.mysql.com/doc/refman/5.0/en/show-processlist.html

答案 1 :(得分:1)

您似乎只想保留代码生成(或接收)的大量数据,并且您不希望经常获取它们(在此部分代码中)。如果是这种情况,并且您的数据生成率如此之高,我建议使用NoSQL数据库,例如MongoDB而不是MySQL。 它们只是为大量数据集创建的,它们是集群就绪的,并且......(只是去他们的文档)。