Mysql InnoDB与Mongodb的写入性能

时间:2015-06-17 16:39:35

标签: mysql mongodb

每次呈现网页时我都需要增加一个计数器。

  • 当我使用mongodb执行此操作时,我可以在常规磁盘上的4核/ 8线程CPU上执行大约每秒16000次写入。

  • 当我使用Mysql InnoDB表时,我只能做...常规磁盘上每秒30次写入或SSD上写入200次!!

因为每个事务只有一个写入(基本上我在为同一个http请求递增计数器后没有其他写操作) 将autocommit用于False并手动提交将无济于事。

不同之处在于Mongodb懒得写出来。

我尝试将Mysql缓冲写入,然后通过将这些参数设置为my.cf将它们刷新到磁盘,但它没有帮助:

innodb_buffer_pool_size = 1G
innodb_flush_method=O_DIRECT
innodb_log_file_size=100M
innodb_change_buffering=all
innodb_thread_concurrency=8

有没有办法让更快的mysql写入?

2 个答案:

答案 0 :(得分:1)

如果您所做的只是“每次呈现网页时递增一个计数器”,那么我建议您完全抛弃数据库。将计数器完全保留在内存中(例如通过memcached),并使用cronjob每隔10分钟将其转储到磁盘上以保留更长久的记录。

如果您记录的不仅仅是计数器并且想要使用数据库,请考虑使用MySQL MEMORY存储引擎(https://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html)。

CREATE TABLE t (i INT) ENGINE = MEMORY;

该表将保存在内存中,因此比基于磁盘的表快得多。如果你需要永久性的话,你只需要一个脚本来不时地手动“刷新”到磁盘(例如mysqldump)。

答案 1 :(得分:0)

innodb_flush_log_at_trx_commit = 2

获胜者是:快150倍!!!在标准磁盘上(稍后将尝试使用SSD)