2012-12-28 139 views
1

我有一個在線服務(在線詞彙培訓師)。每個用戶都有自己的詞彙。大型數據庫

現在,我不知道,我應該如何構建我的Mysql-DB。

據我所知,我有不同的可能性:

  1. 一切都在一個表(MyISAM數據):我店所有的詞彙在一個大的MyISAM表,並添加一列「用戶id」,以確定每個用戶的詞彙表

  2. 每個用戶都有自己的表(MyISAM):每次創建用戶時,程序會添加一個名爲「vocabulary_ {userid}」的表,其中{userid}用於將表連接到一個用戶。

  3. 在一張表(InnoDB)中的所有內容:像第一點一樣,但用InnoDB代替MyISAM。

問題是,一個大的詞彙表最多可以達到1億行。使用MyISAM,問題是每個查詢都會鎖定整個表。所以我想,如果有很多用戶在線(併發送很多查詢),表格可能會被鎖定很多。對於InnoDB,我不確定,因爲我有很多SELECT-,UPDATE-和INSERT-命令,所以這是一個很好的解決方案。

我希望任何人都可以幫助我。先謝謝你。

+7

我想不出比#2更糟糕的選擇。 – JJJ

+2

我質疑關係數據庫是否適合這個問題,而不是我是這個問題的專家。 – jpmc26

+2

我想不出比Juhana更好的答覆。 – GolezTrol

回答

3

InnoDB一起使用幾乎總是更好。 InnoDB可以處理100個行,最大尺寸爲64tb.

這聽起來並不像你有關係數據集,而是更多的關鍵/值存儲。也許Riak是一個更好的解決方案。

+0

如果使用關係數據庫表,則必須使用適當的索引。 – jpmc26

1

這取決於

如果你開始有每個用戶(又名切分)一個表,你將不得不在一開始一些麻煩。

如果您現在不需要縮放。去索引好的表格。我不會使用MyISAM但InnoDB的,而不是否則,你可以通過MyISAM數據的bigests問題被擊中(鎖...)

1

這個正常關係設計會,我想,用三個表:

  1. 用戶 - 用戶ID和其他屬性:姓名,電子郵件等
  2. 詞彙 - 對問題不太清楚,但可能包含詞性和詞義等屬性,可能包含單詞ID(因爲某些單詞拼寫有多重含義)。
  3. User_Vocabulary - 包含用戶ID,Word ID和可能屬性的表格,如'學習日期'。

如果在進行查詢時MyISAM鎖定了表,那麼如果需要對User_Vocabulary表進行併發更新,則無法使用MyISAM。所以,與InnoDB一起去所有的表。