2011-06-15 12 views
5

我是MySQL中的數據庫管理員和開發人員。我和MySQL一起工作了兩年。最近我學習和研究了O'Reilly高性能MySQL第二版,以提高我在MySQL高級功能,高性能和可伸縮性方面的技能,因爲我經常因缺乏對MySQL的先進知識而感到沮喪(在很大程度上,我還有)。這些MySQL數據庫設計(附件)中的哪一個最適合大多數讀取高性能?

目前,我正在開發一個有聲望的Web項目。在這個項目中,我們將有相當的內容和用戶從開始。我是數據庫的設計者,這個數據庫必須非常快(一些插入,但大多數和更重要的READS)。

我想在這裏對這些要求討論:

  • 將有幾種物品
  • 的項目有共同
  • 的項目也有一些領域和關係有一些領域和關係特殊,使他們彼此不同
  • 這些項目將不得不列出的所有一起訂購或由公共字段或關係過濾
  • 的項目將不得不也只有類型(examble item_specialA)

我列出一些基本的設計疑惑,我希望你能幫助我決定並學習哪種設計方法對於高性能MySQL數據庫會更好。

古典的形式給出

下圖顯示了clasical的形式給出了這是第一個,你可能會想到用心靈在數據庫想着:Database diagram

集中的形式給出

但也許我們可以用一些或僞的面向對象的範式來改善它,以便共享一個共同項目的共同項目和關係表。它還將用於列出所有項目種類是有用的:Database diagram


  • 優點和一個缺點?
  • 您會選擇哪一種方法,或者您會應用哪些更改才能看到以前的需求?

非常感謝!

回答

1

你有兩個不同的數據映射策略。你稱之爲「古典」的是其他來源的「每個具體類的一張桌子」,而你稱之爲「集中的」是「每班一桌」(Mapping Objects to Relational Databases: O/R Mapping In Detail)。他們都有自己的優點和缺點(請點擊上面的鏈接)。第一個策略中的查詢速度會更快(在第二個策略中,您只需要加入2個表格和3個表格)。

+0

感謝您的鏈接。很有用!! – 2011-06-16 17:20:30

0

我認爲你應該探索經典的超類型/亞型模式。這裏有來自SO的some examples

+0

它幫助了我,但我想在上面發佈的示例中獲得更多的信息。 – 2011-06-15 17:23:55

+0

@Emilio,很難讀懂你的模型,一切都被稱爲item或item_special。難道你不知道哪些物品(可能)或...? – 2011-06-15 17:36:28

+0

這是一個例子。 Item_specialA,B或C是項目的子項。我已經知道他們是誰,但是閱讀模型會變得更加複雜。 您也可以閱讀圖中的註釋來澄清。 – 2011-06-16 08:24:43

0

如果您正在尋找多爲速度,可以考慮選擇性地使用MyISAM表,使用集中式的「對象」表,只是一個與此表單上正確的索引附加表:

object_type | object_id | property_name | property_value 
user  | 1   | photos  | true 
city  | 2   | photos  | true 
user  | 5   | single  | true 
city  | 2   | metro   | true 
city  | 3   | population | 135000 

等...主鍵或索引鍵(object_type,object_id,property_name)上的查找將快速發展。另外,當新屬性出現時,您可以減少以457個表結束的需要。

它不完全是一個設計良好的,也不是完全標準化的數據庫,如果你正在尋找一個長期的大型網站,你應該考慮緩存,或者至少使用非規範化的範例,非規範化的mysql表一個,redis或MongoDB。

+0

爲什麼MyISAM而不是InnoDB? InnoDB擴展性更好,主鍵查找速度更快。 – 2011-06-16 08:47:47

+0

「選擇性使用」,用戶注意到的要求(一些插入,但大多數和更重要的閱讀),幾乎任何提示在互聯網上將導致我們有選擇地使用MyISAM高讀/寫率。對於讀取,MyISAM歷史上更快。對於寫入,InnoDB是事務性的,MyISAM不擔心原子寫入,所以它也會更快。 – MarcosBL 2011-06-16 09:03:03

+1

對不起,在非商品硬件上正確配置的MySQL實例將會在InnoDB中產生更好的結果。 InnoDB根據主鍵存儲數據的方法不同,所以主鍵查找**會更快。嘗試谷歌HandlerSocket並檢查爲什麼。另一方面 - 是的,MyISAM在寫入時速度更快,但在讀取時(而不是談論少量數據,使用更少量的數據會更好)。 – 2011-06-16 09:06:58

相關問題