2011-07-14 34 views
2

我建立一個非常大的網站目前它使用大約13表和它的完成時間應該是約20MySQL的許多表或幾張表

,我想出了一個主意,更改首臺使用ID,Key,Value而不是許多列,但是我最近以爲我也可以在表格中存儲其他數據。

將幾乎所有東西都存儲在一張表中是否高效/智能?

編輯:這是一些更多的信息。我正在建立一個社交網絡,最終可能會有成千上萬的用戶。當網站啓動時,MySQL集羣將被使用,現在我正在使用開發VPS進行測試,但是在啓動之前,所有內容都將被移至專用服務器。我幾乎不知道任何關於NDB的東西,所以這應該是有趣的:)

+0

,因爲你需要使用盡可能多的表,但沒有更多的/使用盡可能少的表,你可以,但毫不遜色。 – Johan

+0

簡短的回答 - 不,它將幾乎所有的東西都存放在一張桌子裏是非常糟糕的。 –

+0

認真,把一切在一個表中的KitchenSink是一個壞主意,閱讀了關於標準化:http://en.wikipedia.org/wiki/Database_normalization – Johan

回答

0

授予我不知道太多關於大型數據庫設計,但從我所看到的,即使是非常大的應用程序存儲他們的東西是一個非常小的數額的表格(每桌20GB)。

對我來說,我寧願在1個表中填寫更多信息,因爲這意味着數據並不是亂丟垃圾,而且我也不必在多個表上執行操作。雖然1臺也意味着雜亂的(通常是對我來說,每個對象有它的上表,對象是你在你的應用程序邏輯有一些,如用戶類,或博文類)我猜」

米試圖說的是,做任何有意義的事情。不要在2個不同的表中把信息放在同一個東西上,也不要把2個東西的信息放在1個表中。用1張表只描述某個對象(這是很難解釋的,但如果你做的是面向對象的,你應該明白。)

0

nope。喜好應該原樣保存它們,是(在用戶表) 例如私人信息不能被存儲在用戶表...

你不必去想加入不同的表...

+0

我應該存儲在另一個配置文件/在一個表中的喜好,然後朋友。消息已存儲在不同的表中。確切地說, – user683812

+0

! :) ..... – genesis

+0

這就是我想到的,除了朋友。另外還有一個friend_requests表。至於消息,有兩個表格用於發佈帖子,另一個用於參與者(因爲可以有多個)。 – user683812

1

這個模型稱爲EAV(實體屬性值)

它是某些情況下可使用的,但是,它的效率較低,由於較大的記錄,或較大數目的聯接和不可能上創建多個屬性複合索引。

基本上,當實體有很多屬性,這是極其稀少(很少填寫)它的使用和/或不能在設計時預測,如用戶標籤,自定義字段等

+0

EAV的主要缺點是無法輕鬆實施數據域(例如,確保'autorized_ip_address'是一個有效的IP地址,'percentage'介於0和100之間或'birthday'是日期)。然而,MySQL並沒有檢查限制...... –

+0

EAV的主要缺點是它有大約3251的缺點。 – Quassnoi

0

我想先說20表格不是很多。

一般來說(很難從你提供的有限信息來看),鍵值模型並不像速度方面那樣有效,儘管它可以更有效的空間智能。

+0

我的應用程序目前有... <運行快速檢查> 169表,並且肯定會有更多。當然,這不是一個網站,而是一個CRM,但仍然有20個表並不是那麼多。 – Mchl

+0

該網站是一個社交網絡。我不確定它會走多遠,但我們可能會擁有數千個帳戶。儘管我們將擁有MySQL集羣,但我不知道如何處理性能。我從來沒有解決過這麼大的問題。 – user683812

+0

@ user683812也許MySQL(或一般的關係數據庫)並不完全是你所需要的?看看像MongoDB這樣的文檔數據庫。 – Mchl

0

我絕對不會這樣做。基本上,如果你在單個表中存儲了大量數據,那麼當不斷查詢同一個表時,你會看到性能問題非常快。然後考慮一下你需要的查詢的連接和複雜性(取決於你的網站)......不是我個人喜歡的任務。

通過使用多個表將數據拆分成更小的數據集,查詢所需的資源更少,作爲額外的獎勵,它更易於編程!

有這樣做的一些應用程序,但他們是罕見的,或多或少,如果你有一噸列的大表,最是不會有一個值。

我希望這可以幫助:-)

+0

這麼多表嗎?有一個大型的喜好,另一個大的朋友,另一個大概的信息。所有應該保持分離的權利?數據使用PHP鏈接。 – user683812

+0

使用所需的表,而數據庫通常來說最好的做法是「羣」類似組數據,你的表可能是USER_INFO,消息,user_config,site_config,activity_log所有這些數據都與在其他類似的數據分組性質。例如,您可以在mySQL中使用JOIN,以便通過消息數據獲取正確的user_info,然後可以使用PHP或JS等操作數據。你會注意到一個名爲activity_log的表,這是一個很好的使用id,key和value的例子,因爲你可以記錄1000種類型的動作並且不需要1,001個字段 – Ryan

+0

對不起,直接回答你的問題 - 是的,保留這些分開:-) – Ryan

0

我認爲項目中的20個表不是很多。我確實看到你對使用EAV的觀點和興趣,但我認爲這不是必需的。我會堅持到表中3NF適當的FK關係等,你應該確定:)

0

簡單的答案是,20桌不會讓它大數據庫和MySQL不會需要任何優化。所以請重點關注乾淨的數據庫結構和規範化。