亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

MyISAM訴InnoDB

MyISAM訴InnoDB

犯罪嫌疑人X 2019-05-31 17:04:18
MyISAM訴InnoDB我要說的是,我正在做一個涉及大量數據庫寫作的項目(70%的插入和30%的讀取)。這一比率還將包括更新,我認為是一讀一寫。閱讀可能很臟(例如,我在閱讀時不需要100%準確的信息)。所討論的任務將是每小時處理100多萬個數據庫事務。我在網上讀過很多關于MyISAM和InnoDB之間的區別的文章,對我來說,MyISAM似乎是我在這個任務中使用的特定數據庫/表的明顯選擇。據我所讀,如果需要事務,則InnoDB是很好的,因為行級鎖定是支持的。有沒有人有過這類負載(或更高的負荷)的經驗?MyISAM是該走的路嗎?
查看完整描述

3 回答

?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

我有一個簡短的討論表中的這個問題,這樣您就可以得出是否與InnoDBMyISAM.

下面簡要介紹一下在哪種情況下應該使用哪個db存儲引擎:

                                                 MyISAM   InnoDB
----------------------------------------------------------------
Required full-text search                        Yes      5.6.4
----------------------------------------------------------------
Require transactions                                      Yes
----------------------------------------------------------------
Frequent select queries                          Yes      
----------------------------------------------------------------
Frequent insert, update, delete                           Yes
----------------------------------------------------------------
Row locking (multi processing on single table)            Yes
----------------------------------------------------------------
Relational base design                                    Yes

總結如下:

Frequent reading, almost no writing   => MyISAM
Full-text search in MySQL <= 5.5      => MyISAM

在所有其他情況下,InnoDB通常是最好的方法。


查看完整回答
反對 回復 2019-05-31
?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

我不是數據庫專家,也不是憑經驗說話的。然而:

MyISAM表使用表級鎖定。..根據您的流量估計,您有接近200寫每秒。與MyISAM其中只有一種可能在任何時候都在進行中。..您必須確保您的硬件能夠跟上這些事務,以避免溢出,也就是說,一個查詢所花費的時間不超過5ms。

這意味著您需要一個支持行級鎖定的存儲引擎,即InnoDB。

另一方面,編寫幾個簡單的腳本來模擬每個存儲引擎的負載,然后比較結果應該是相當簡單的。


查看完整回答
反對 回復 2019-05-31
?
慕少森

TA貢獻2019條經驗 獲得超9個贊

人們經常談論性能,讀與寫,外鍵等。但在我看來,存儲引擎還有另外一個必須具備的特性:原子更新。

試試這個:

  1. 對MyISAM表進行5秒的更新。
  2. 當更新正在進行時,比如說2.5秒,點擊Ctrl-C來中斷它.
  3. 觀察桌子上的效果。更新了多少行?有多少沒有更新?這個表是可讀的,還是當你點擊Ctrl-C時它被破壞了?
  4. 對InnoDB表進行相同的更新實驗,中斷正在進行的查詢。
  5. 觀察InnoDB表。

    行已更新。InnoDB已經保證您有原子更新,如果無法提交完整的更新,則會回滾整個更改。而且,該表沒有損壞。即使您使用

    killall -9 mysqld

    模擬墜機。

當然,性能是可取的,但是不丟失數據應該勝過那個。


查看完整回答
反對 回復 2019-05-31
  • 3 回答
  • 0 關注
  • 667 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號