2012-11-15 166 views
0

我正在Windows服務器上使用JavaScript,MySQL和PHP進行RIA。關於用大量數據構建數據庫的建議

我有5000個相同結構的數據集,我想放在數據庫中。 5張表對於數據來說已經足夠了,除了一張表格以外,所有這些數據都是相當小的,對於一個典型的數據集,這個表格將會有300,000多條記錄。

另外,500位用戶將只能讀取從這些數據集編譯的統計信息。這些統計數據由PHP提供(不允許直接訪問)。而且,他們對數據的訪問也不盡相同。一些用戶只能使用一個數據集,其他一些只能使用一個數據集。

用戶看到的結果相對較小;大多數請求會返回100行以下,最大的請求將大約700行。所有請求都是通過一個JavaScript RIA,它使用Ajax連接到PHP,後者又連接到數據,完成它的任務並輸出JSON作爲響應,然後JavaScript將相應地顯示。

在思考如何構建這樣,三個選項出現了:

  1. 把數據集相同的表所示。這可以很容易地在最大的桌子上給我15億條記錄。

  2. 爲每個數據集使用不同的表格。這將限制最大的表格大小,但可能意味着25,000個表格。

  3. 忘記數據庫並堅持專有格式。

我傾向於#2的幾個原因。

  1. 我很關心使用非常大的表格(例如:查詢速度,實施限制等)的問題。

  2. 單獨的桌子看起來更安全;它們限制了錯誤和結構變化的影響。

  3. 單獨的表格允許我使用MySQL的表級安全性,而不是實現我自己的行級安全性。這意味着更少的工作和更好的保護;例如,如果在沒有行級別安全性的情況下意外發送查詢,則用戶可能會收到未經授權的數據。與表級安全性不同,因爲數據庫將會無效地拒絕查詢。

這些是我的想法,但我想你的。你認爲這是正確的選擇嗎?如果不是,爲什麼不呢?我錯過了什麼考慮?我應該考慮其他平臺,如果可擴展性是一個問題?

+1

mysql確實支持分區:http://dev.mysql.com/doc/refman/5.1/en/partitioning.html –

+0

謝謝。我正在研究這個。分區級別的安全性(如果可能的話)會搖擺:D – RonaldBarzell

回答

1

1)我很擔心使用非常大的表格(例如:查詢速度,實施限制等)的問題。

DBMS是否必須...

  • 搜索通過一個表中的大指標,
  • 或搜索右表和然後搜索通過該表

的比較小的索引...大概不會使性能方面差異很大。如果有的話,第二個案件有一個無證的組件(查找正確的表的表現),所以我不願意完全信任它。

如果你想對數據進行物理分區,從版本5.1開始MySQL supports that directly,所以你不必通過單獨的表來模擬它。

2)單獨的桌子看起來更安全;它們限制了錯誤和結構變化的影響。

這就是備份的目的。

3)單獨的表格允許我使用MySQL的表級安全性,而不是實現自己的行級安全性。

正確的是,通過視圖或存儲過程可以實現類似的效果。總而言之,我的直覺是用單個表格去除,除非事先知道這些數據集在結構上有足夠的差異以保證單獨的表格。順便說一句,我懷疑你可以使用專有格式做得更好,而且數據庫比較完善。

+0

謝謝;這些都是好點。關於查找正確的表,我只是簡單地用數據集命名錶(每個數據集都有一個唯一的名稱),並將其構建到PHP查詢中的字符串中(例如:「SELECT $ dataSet FROM ...」) 。我同意備份給予我們一定程度的保護,但在恢復之前,影響仍然是一個問題,所以限制最初的命中是最好的。 – RonaldBarzell