重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
事務每次提交都會將log buffer中的日志寫入os buffer并調用fsync()刷到log file on disk中。這種方式即使系統崩潰也不會丟失任何數據,但是因為每次提交都寫入磁盤,IO的性能較差。
創新互聯建站專注于江永企業網站建設,響應式網站建設,商城系統網站開發。江永網站建設公司,為江永等地區提供建站服務。全流程按需網站設計,專業設計,全程項目跟蹤,創新互聯建站專業和態度為您提供的服務
事務提交時不會將log buffer中日志寫入到os buffer,而是每秒寫入os buffer并調用fsync()寫入到log file on disk中。也就是說設置為0時是(大約)每秒刷新寫入到磁盤中的,當系統崩潰,會丟失1秒鐘的數據。
每次提交都僅寫入到os buffer,然后是每秒調用fsync()將os buffer中的日志寫入到log file on disk。
以上出自
當我們在導入大量數據時,控制innodb_flush_log_at_trx_commit =2,即可節省導入時間,待測試
首先, 插入上萬條數據,對于數據庫來說并不是“很大”的工作量,一般配置的筆記本電腦都可以在1分鐘內完成。 所以最簡單、最靈活的辦法還是寫SQL語句。
如果不希望DB編譯器每次執行都編譯SQL的話,可以使用存儲過程,直接調用,性能上會好很多。也比較簡單。
(幾萬條數據怎么地也得要時間去處理,所以不可能特別快的。)
如果由于各種原因,導致這個插入還是很慢, 而且你的MYSQL又是5.0以上版本的話,可以使用BulkCopy來進行批量操作。
BulkCopy的原理就是Client直接把一個數組(DataTable)傳給DB,然后傳入表名,所有的編譯、操作都由DB自己完成,效率很高。
引用MySql.Data.dll , 調用MysqlBulkCopy函數即可。
這個函數在處理海量數據插入的時候效率尤為明顯, 小量數據反而沒什么優勢,而且由于傳入的DataTable格式必須和表的字段一模一樣(空的列也要傳進去),導致C#要寫很多代碼來構造這個數組,所以要你自己權衡用還是不用。
我在自己的電腦上批量插入一億條數據,Insert寫法大概需要1小時,BulkCopy大概只需要5分鐘。
建緩沖區。比如其他類型的高速緩存(redis等)作為中間緩沖層。
數據的查詢,更改首先在這個層處理,處理完再更新到對應的數據庫。
注意額外增加鎖,或者緩存機制防止緩存擊穿,雪崩導致系統崩潰。