2012-11-04 34 views
0

我們使用MySQL MyISAM引擎,並有我們需要每天都在更新行(百萬)的數量龐大,而用戶仍然可以訪問數據庫的情況。MySQL的MyISAM數據更新

我們有來自美國,英國,印度,中國不同時區的用戶。當用戶首次註冊時,數據從第三方來源下載。所有用戶共享相同的一組表,但它們的數據不重疊,即沒有用戶將訪問與另一用戶相同的行。

第三方系統修改數據,以便讓我們的數據庫是最新的,我們每個下載用戶night.The的數據相對於用戶時區的午夜更新用戶的數據的新快照。

由於所有用戶共享同一個表,這意味着數據更新過程可以更新在美國時區的用戶的數據,而在英國的用戶都在積極瀏覽他們的數據。這是問題所在。我們有數百萬的數據需要更新,但我們無法做到。

請建議如何在不影響其他用戶訪問數據庫,最好更新用戶的數據。存儲在數據庫中的數據是數字,所有列都是整數。

+0

@Morgan感謝..我是新手here..didn't知道這件事。我將嘗試接受答案..正在搜索如何執行此操作.. –

+0

您可以通過單擊答案左側的複選標記符號來執行此操作。祝你好運! –

回答

0

我看到兩個解決方案:

  • 切換到InnoDB的數據庫引擎 - 這會給你行級鎖,而不是表級別。請注意,插入通常較慢。
  • 按地區劃分你的餐桌。根據您的情況,如果您的表格按區域分割,您將永遠不會同時閱讀和編寫任何表格。
+0

@馬特..感謝您的回覆。我們在數據庫中使用了索引。那麼,在轉換到InnoDB Engine時,它會受到影響嗎? –

+0

@MadanMadan索引對兩者都是一樣的。但是爲InnoDB索引做很多插入和更新比較慢,因此在數百萬插入內容中刪除和重新創建索引會更快,或者至少指示數據庫在插入期間跳過獨特的檢查(只要您確定它們確實是真的獨特)。 –