簡體   English   中英

Mysql InnoDB與Mongodb的寫入性能

[英]Mysql InnoDB vs Mongodb write performance

每次渲染網頁時,我都需要增加一個計數器。

  • 當我使用mongodb進行此操作時,我可以在常規磁盤上的4核/ 8線程CPU上每秒執行約16000次寫操作。

  • 當我使用Mysql InnoDB表時,我只能執行...在常規磁盤上每秒寫入30次或在SSD上寫入200次!

因為每個事務只有一個寫入操作(基本上,對於同一個http請求,增加計數器計數后,我就沒有其他寫入操作了),將autocommit設置為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 )。

innodb_flush_log_at_trx_commit = 2

是贏家:快150倍!!! 在標准磁盤上(稍后將在SSD上嘗試)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM