Mysql InnoDB 与 Mongodb 写入性能

标签 mysql mongodb

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

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

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

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

不同之处在于 Mongodb 会延迟刷新写入。

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

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

有没有办法让 mysql 写入速度更快?

最佳答案

如果您所做的只是“每次呈现网页时增加一个计数器”,那么我建议您为此完全放弃数据库。将计数器完全保存在内存中(例如通过 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)。

关于Mysql InnoDB 与 Mongodb 写入性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30897504/

相关文章:

mysql - 没有运算符的 Where 子句

mongodb - 最终一致性和测试用例

javascript - 如何从 Mongo 中的数组中删除元素

c# - 如何从 C# 使用 mysql.exe

php - Laravel 5.3 - 外键约束的形成不正确

Mysql插入触发器不起作用

php - 从数据库中的所有表中选择所有数据并打印到一个表中

java - Spring Boot数据与MongoDB——过滤子文档数组查询

mongodb - 如何在多个字段中搜索文本或表达式

聚合框架中的 Mongodb $cond