期望在單個伺服器 (MySQL) 上在 3-4 小時內導入大小超過 50 GB(約 300+ 百萬條記錄)的數據庫是否現實?
我在文本/csv 文件中有數億行(順便說一句,基因組學數據庫 - 每條記錄的長度小於 255 個字元……)。
理想情況下,我想讓它們可搜尋,因為現在我最好的選擇是吐出它們(來自 cygwin 的一點幫助!)並從記事本 ++ 中將它們作為文本文件一一讀取〜500mb(是的……我知道…… ) - 所以這是非常不方便且類似於穴居人的方法。
我想使用 MySQL,但也許其他人,在需要時為 Amazon 實例預算高達 500 美元 - 也許 32gb ram 一些至強金和亞馬遜上的 200gb 硬碟可以做到嗎?最多可以使用 10 個實例,每個實例都進行並發插入/載入。
我讀到有人在具有 ssd 和 32gb ram 的本地伺服器上使用“載入數據文件”完成了 300,000 行/秒 - 如果我達到甚至 50,000 行/秒然後能夠在正常時間用 phpmyadmin 查詢它 - 我會很高興。謝謝!
我讀到有人在具有 ssd 和 32gb ram 的本地伺服器上使用“載入數據文件”完成了 300,000 行/秒
這聽起來像是取自我的部落格文章(或者至少那些是我的數字和規格):https ://jynus.com/dbahire/testing-the-fastest-way-to-import-a-table-into-mysql- and-some-interesting-5-7-performance-results/和https://jynus.com/dbahire/testing-again-load-data-on-mysql-5-6-5-7-8-0-non -ga-and-mariadb-10-0-10-1-and-10-2-non-ga/
如您所見,我的經驗是基於實際測試的;但不僅僅是像上面這樣的實驗室測試,我這樣做是因為它們幫助我準備好確保我的數據庫備份(和恢復)被正確生成,並且它們可以可靠和快速地執行,每天處理邏輯轉儲和快照對於我們儲存在 MariaDB 數據庫中的半 PB 數據:https ://www.slideshare.net/jynus/backing-up-wikipedia-databases
32GB 記憶體伺服器上的 50GB 數據庫是一個非常大的比例,其中 60% 的數據可以放入緩衝池。在這種情況下,thoughput 可以大大優化,只要您為其設置 vm、os 和 mysql 配置(禁用二進制日誌、增加緩衝池和事務日誌文件、在導入期間放鬆一致性參數等)。您還希望對原始格式進行優化以便於載入,這樣您就不會在解析或轉換格式或其他更改時浪費 cpu 週期,也不會在大型事務中以及如果可能的話在多個執行緒上並行執行。
例如,我的生產中有 1-2TB 的數據庫,包含數十億行,我可以在 512GB 記憶體的機器上在 6-12 小時內進行邏輯恢復,包括許多索引。
在上述正確的情況下,使用一個主要在記憶體中的數據庫,我將能夠在大約 30 分鐘內並行遠端載入一個 50 GB 的數據庫。如果儲存慢,則少於 1 小時。小心,因為測試佔用專用資源;cpu、記憶體或 io 限制會造成瓶頸,從而導致載入時間增加。