2012-02-20 57 views
0

我被困在一块岩石和一个硬的地方,正在制作一个应用程序。基本上,该程序会生成一个非常大的数据集(它超过10个演出并超过服务器上的内存,并且很难在稍后将该数据集从字典传送到其他服务器)。我决定使用数据库来存储数据,但遇到了一个问题,在我产生更多进程时,他们不会使用超过10%的可用内核,但mysql服务总是在60-100%左右。有没有办法让mysql处理大量的并发写入?

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

正如你所知道的我的目标,我没有忠于任何特定类型的系统,所以如果mysql不是一个好的解决方案,我很乐意尝试另一种工具(我打算使用hbase,但沿着mysql的道路第一)。如果还有什么更好的,请告诉我。

回答

1

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

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

您试图写入的模式是什么?在架构上实现了哪些索引?

您是否有繁重的读取操作,或者这是全部写入?

你在写什么?它是你正在写的单行还是它在事务中包装的多个操作?

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

您是否使用Innodb作为数据库?

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

+0

我生成8个过程,所以我认为8写一秒。该表目前只有一列(它必须是唯一的)。它没有索引(认为有助于读取不写,所以没有做任何事情)。它真的有两个操作,它是一个读取,如果它不存在写入数据库。版本是5.1.61。我不确定配置,它是默认的centos 6,我使用Innodb。当我查看锁定的过程时,有11行结果,其中2个未锁定(一个是检查权限,另一个是写入网络)。 – Lostsoul 2012-02-20 08:13:52

+0

我应该添加,该应用程序运行在与数据库相同的服务器上。如果需要,我可以移动。服务器有8个内核,但SQL最多只有1个,而且应用程序占用的内存少于10%,所以每个内核对于MySQL而言都有90个。 – Lostsoul 2012-02-20 08:34:24

+0

这对于音量而言确实不算什么--MySQL可以在简单的笔记本电脑上处理它的睡眠。没有索引不是一件好事,尤其是如果你在写入之前进行读取 - 没有该索引,mysql将为每个插入(在该扫描期间具有关联的锁)执行完整的表扫描 - 对于大数据集每秒x6可以真正咀嚼你的过程。我会建议在首先搜索的字段中添加索引,看看是否有助于减少争用。 – AlexGad 2012-02-20 15:12:36

1

看起来你只是想保存你的代码生成(或接收)的大量数据,并且你不想经常(在这部分代码中)获取它们。如果是这样,并且您的数据生成速率如此之高,我建议使用NoSQL数据库,例如MongoDB而不是MySQL。 它们只是为大量数据集创建的,它们是集群准备好的,并且...(只需转到其文档)。

+0

我不同意这样的假设,即如果你有很多数据要坚持的话,那么NoSQL db就是要走的路。让我们面对现实吧,Facebook并没有达到它的位置,而没有将大量数据持久保存到mySQL。根据我的经验,mySQL可以处理大量数据,但是与其他所有的数据一样,它需要正确使用。我已经使用了MongoDB和Redis,并且在某些领域都很出色,但是如果mySQL已经到位了,在转移到其他会出现问题的东西之前,找出发生了什么问题不是一个好主意吗? ? – AlexGad 2012-02-20 05:12:40

+0

我还补充说,它提到的数据不适合内存。 MongoDB下的工作集很可能不适合内存。如果是这样的话,那么他的表现就会更差,因为如果一切都无法进入记忆,那么蒙戈真的很难受。最重要的是,高写入可能会受到Mongo全局写入锁定的影响。解决这个问题的方法是分片,但现在事情变得越来越复杂。正如我所提到的,在查看其他地方之前,首先要弄清楚mySQL实现的真正问题。 – AlexGad 2012-02-20 05:19:40

+0

谢谢你的建议..我真的很感激它(不是试图开始一场激烈的战争或任何事情),但我真的没有任何特定解决方案的附属物只是想要一些符合我需要的东西。我打算给hbase一个尝试,但不确定在mysql中是否有某些东西需要修复,或者其他东西是否更好。我会研究moogodb并回答@ AlexGad的问题,因为我通过mysql数据库并找出它们 – Lostsoul 2012-02-20 08:07:51

相关问题