2015-04-01 82 views
0

在我的客戶關係管理系統中,我計劃現在能夠支持100家企業的規模,但理想情況下這可以擴展到任何規模。MongoDB客戶關係管理數據庫設計效率

它的成立,現在的方式:

每個企業都有數據 的3個部分,每部分都有1000「項」 的每個項目都有30 - 50「數據塊」 - 每個數據塊都有一個id,它對應的條目,指示它是哪種類型的數據的值以及它所持有的值。

100 * 3 * 1000 * 30 = 9000000條數據。

我通常只會在任何給定的時間拉動100個條目,所以只有3000-5000左右的數據塊被拉出,但偶爾一次可能多達1000個條目或更多。

我有收藏業務,部分,條目和數據塊。

我以這種方式設置它,因爲有些業務將保存不同類型的數據而不是其他數據,而SQL數據庫實際上並不適用於此。

樣本數據的產生可能是這樣的:

  • 通過名稱找到一個部分(即業務1有一節叫SECTION1)
  • 找到那款100項
  • 找到30個數據塊對於每個條目

這會導致101找到呼叫。我也可以對這些條目執行查找調用,然後使用具有100或鍵/值對的where數組查找調用數據,這會在其條目ID是100或鍵/值之一時抽取100個數據條目對。

這是一個可擴展的數據庫設計嗎?有更好的方法我應該這樣做嗎?

回答

1

將所有相關數據放在不同的集合中幾乎肯定不是一個好選擇。我會提醒你的是,mongodb沒有設計任何連接,所以你將有一段時間使用條目和部分集合來收集數據塊。因爲你的規格非常模糊(我不知道段落,條目或數據塊代表什麼),所以很難說如何設計它。但對我來說,也許有2個收藏 - 1個爲企業,1個爲數據塊。然後只需在數據塊文檔中將條目和節標識作爲字段。

+0

查看我的編輯更清晰一點。我認爲這將有效地和你的建議一樣高效。 – maxhud 2015-04-01 17:34:21

+0

大概你會想要返回一些部分的所有數據,是嗎?所以它不會是101找到電話,它會是1找到調用來獲取該部分,1找到調用獲得100個條目,然後1找到獲得30 * 100的數據片。但爲什麼你想要爲數據庫中的中央查詢執行3個表連接?如果你想這樣做,不要使用mongodb,使用SQL數據庫連接,因爲你在這裏模擬連接 – jtmarmon 2015-04-01 17:50:45

+0

連接看起來效率很高,特別是如果我只是做一對夫婦而不是100.由於這個原因,我沒有使用SQL數據庫:每個數據塊都有一個「值」字段。該值可以存儲任何類型的數據,並且該數據可以在mongodb中排序。如果是sql,我無法做到這一點。 – maxhud 2015-04-01 17:54:16