Mysql

快速插入的最佳數據庫結構

  • December 11, 2015

我正在使用 MySQL Percona 伺服器。該表需要使用“INSERT INTO … VALUES”對較小的請求(大約 100k 條記錄)進行快速批量插入,對較大的請求(最多 10kk 條記錄)使用“LOAD DATA INFILE”。此外,還有全表掃描的選擇(使用索引,總共 100kk 條記錄中將有 10-3000 萬條記錄),它們也需要盡快完成。我嘗試了 myisam,每秒插入了大約 50k 條記錄,而 InnoDB 只有大約 25k。這個數字還可以,但如果我能改進它們,我會很高興。

你將如何組織這樣的表以及你將應用什麼設置到 mysql 伺服器?我們有一個 128G 記憶體的伺服器,我認為它可能會有所幫助。

我對這件事做了一些研究,但仍然覺得自己無能。如果您管理過類似的桌子 - 請分享您的經驗,謝謝。

MySQL 的 InnoDB 引擎的問題在於儲存架構本質上是使用索引組織的表,當目標表很大時,很遺憾會遇到大量插入的性能問題。唯一可以緩解這種情況的情況是,如果您有順序插入,即插入集的主鍵遵循一個序列。

對於數據的高攝取率,建議使用不同的技術,例如使用日誌結構合併樹的 Cassandra,或者在您的情況下,我可能會推薦TokuDB,它已被 Percona 收購,並使用了一種稱為分形樹的技術index,這本質上是一種創造性的方式來記憶體、預排序和批量插入到您的索引組織的表中(當然,它的功能遠不止這些,但這裡不需要詳細介紹。)

長話短說,如果您的攝取率較高,則需要由 Oracle 和 PostgreSQL 等數據庫實現的堆組織表結構,如果您的攝取率非常高,則需要使用 Cassandra 或 TokuDB 等數據庫。

引用自:https://dba.stackexchange.com/questions/123250