高並發insert ignore是選擇innodb還是myisam?

高並發寫的時候是選擇innodb還是myisam呢?或者說如何提高insert效率?

每秒大概有5w - 7w的量(更正下,大概2w - 3w的量),簡單的3個int型欄位,3個欄位是唯一索引,如何提高insert ignore的速度?

簡單描述下應用場景,每天的uv和ip分表,uv 4m ip 33m 的數據量,可以忽略查詢,只有insert ignore, 3個欄位 t d s唯一索引


TokuDB--它的fractal tree(其實就是buffered tree)能把隨機IO變為順序IO,寫入性能極強,我們測試在HDD是InnoDB的3倍以上~

Myisam官方已經放棄維護了,雖然插入性能也行,但不是crash safe且crash後恢復時間長,而且只有索引能緩存在內存中,所以都不一定比有熱數據緩存的的InnoDB快;不要用了~


選擇InnoDB還是MyISAM

如果不是對事務要求非常的強,高並發寫推薦選擇MyISAM。理由如下:

  1. MyISAM的索引和數據是分開的,並且索引是有壓縮的,內存使用率就對應提高了不少,能載入更多索引,而Innodb是索引和數據是緊密捆綁的,沒有使用壓縮從而會造成Innodb比MyISAM體積龐大不小;

  2. InnoDB存儲引擎在插入數據時會花更多的開銷在維護完整性、維持事務上,所以效率比MyISAM低;

  3. 根據題主的描述,主要是插入數據,並且只有一張表,後期對該表的操作也主要是查詢吧,就查詢速度而言,MyISAM比InnoDB更優越,並且還有MyISAM索引,可以很好的優化查詢速度。

如何提高INSERT效率

根據題主的描述,每秒有5w - 7w的量,誠然這個數據量是相當驚人的。並且數據是實時產生的,那mysqlimport或者load data就無法派上用場。提供幾個提高INSERT效率的辦法吧。

  1. 批量插入VALUES,而不是每一次插入都是一條數據;

  2. 刪除MySQL的索引,有索引存在插入速度會受很大的影響;
  3. 題主的表有3個int欄位,並且都是唯一索引,可以指定一個主鍵。

是否選擇insert ignore

我們知道有三種插入方法,insert into、replace
into及insert ignore。既然題主提供表的3個欄位都是唯一的,那不會出現重複的數據,為什麼還用insert ignore呢?insert
into此時跟insert ignore不是一樣。

如上,個人拙見,僅供參考。


單線程MyISAM插入更快. innodb_flush_log_at_trx_commit=1, 禁止auto commit, 不要用單個線程或者進程插入, 同時模擬100個客戶端插入, 你會發現InnoDB插入比MyISAM快. 當你更新的數據主鍵非常離散的時候, InnoDB可以用多個row lock而MyISAM總是lock整個table一條一條插入, MyISAM會比InnoDB慢. 事實上, MyISAM嚴格意義上根本不算是個資料庫引擎, 最多算個結構化文件存儲引擎. 在我的MBP上32個線程總共插入32萬條記錄, MyISAM大概是17.5秒, InnoDB大概16秒不到, 32個線程隨機更新更新是MyISAM 23秒對InnoDB 19秒. 我的MBP是多通道的SSD, 如果在硬碟上測試差距會更大. 所以, 好多同學在單線程下auto-commit的測試來證明MyISAM比InnoDB快是不靠譜的. 但是無論如何, 大量插入還是NoSQL方便, 你7萬的tps已經很高了, 已經非常不適合MySQL了, 如果只是峰值這樣高, 建議你用文件或者隊列buffer一下慢慢插, 如果是持續性的這樣的TPS, 建議用append類型的NoSQL, 比如cassandra 和 redis. Netflix曾經在AWS上做過實驗,288個m1el節點可以達到每秒一百萬次寫入, 基於SSD的商業資料庫Aerospike更是只要50個節點 (參考 Daniel"s Blog: Cassandra and Aerospike, the one million TPS war).


InnoDB,根據高性能mysql

大概是說myisam在目前的版本,表現並不一定比innoDB優秀

而且如果不會產生衝突,ignore也無必要


簡言之,MyISAM無索引寫入非常之快,非常快,但並發查詢及版本控制上,InnoDB更勝一籌,如果只是Insert,當然是MyISAM~


肯定 MYISAM,INNODB速度太慢,不光插入,查詢也是一樣,不要被網上的文章誤導,多用生產環境測試下。

SELECT * FROM news WHERE id&>=3678 ORDER BY intime ASC LIMIT 2;

這樣一條查詢,我的生產環境,MYISAM比INNODB快10倍。


推薦閱讀:

innodb的意向鎖有什麼作用?
如果從頭開始,如何少走彎路成為合格的DBA?
目前的資料庫管理認證都有哪些呢?Oracle、DB2、MS SQL、MySQL都分別有哪些認證呢??
面向主題的資料庫技術的概念已經提出十幾年了,理念是先進的,但為什麼被實際應用很少?
自己做個erp系統,目前主流的開發軟體是什麼?

TAG:資料庫 | MySQL | 資料庫管理員DBA | MyISAM | InnoDB |