2013-04-03 173 views
1

我需要一個建議。數據庫設計:MySQL或MongoDB中/ OrientDb到的映射關係?

我正在開發一個用PHP編寫的Web應用程序,只有一些實體,但有很多(按數量和類型)關係。

簡單的例子:

  • 實體:4
  • 可能的關係,多對多和一對多和OneToOne:打

今天,它是有意義的繼續使用映射關係的關係數據庫管理系統一樣MySQL或更好使用像OrientdDb圖形數據庫,或面向文檔的數據庫MongoDB的一樣?

我認爲最好是與mysql中的實體以及OrientDb或MongoDb中的實體之間的關係一起工作。在實體插入我可以複製它的一些數據的管理關係,避免幾十個表之間的連接的避免了巨大的索引,並在MySQL更快的插入/更新。

我做錯了嗎?

+0

也許最好是提供一些更多的信息,當你只有少數幾個實體時,你需要幾十個連接(多少個?)。無論如何,對於連接和mongo,通常我的想法是嵌入信息與文件 – Melsi

+0

與'實體'我的意思是有些像城市,用戶,事件,地點....與關係之間的所有可能的關係,這些實體...(用戶可以去N個城市,用戶可以住在一個城市,用戶可以去一個活動,用戶去了更多的活動,用戶喜歡......)好吧,我有點'通用,但我想你明白我的意思是對的嗎? – vincenzodb

+0

好吧,我明白了,知道什麼是實體,ER設計等,我只是好奇,關於「幾十個聯接」..你通常不需要加入超過2-3或4個表(通常)。無論如何,我會建議你研究一下每個系統的弱點和長處,這樣你就可以看到它們如何應用到你的項目中。以前個人使用過mysql,現在我愛上了Mongo,所以我的意見不能客觀。不過,我還是堅持你研究你的自我每個服務器的基礎上,特別是在如何管理連接(這是您最感興趣) – Melsi

回答

2

首先,我認爲你不應該考慮關係的數量,而是考慮到它們的本質。然後你可以選擇你正確的技術。

更詳細的描述你的域名可能會有助於給你一個很好的建議。無論如何,我可以說明這兩件事情:

  1. 不要使用mongo關係!如果Mongo不是爲了管理而設計的,那就是關係。
  2. 如果您打算使用Orient來管理圖形關係,並且您也不需要很多常規關係(本質上是正常的,我的意思是),不要打擾使用MySQL和Orient:只能用於Orient。

當然,請記住,MySQL是一個沒有腦子的託管解決方案,蒙戈是得到一些動量(ObjectRocket和ServerGrove既提供雲服務蒙哥開箱即用,但你有一個硬時間找到一個「廉價」共享主機蒙戈),而東方,我認爲你必須朝向往一個專用的服務器/雲實例和自己配置服務。

+0

TNX @StickGrinder, 我已經considerated數量關係,因爲關係=聯接和很多連接都更加昂貴......我無法詳細輸入詳細信息,但是在我的正常數據列表中,我可以列出每個項目的關係。 我想盡可能低負載和優化應用程序的增長,最簡單的方法的能力,用最好的技術來管理關係,這是我的應用程序的心臟(特別是對數據進行排序)。我問這些東西,因爲我幾乎不知道mongodb和東方:) – vincenzodb

+0

OrientDB託管是由NuvolaBase.com提供或考慮在雲上安裝您自己的服務器(它是Java) – Lvca

0

但是你的問題很模糊,我相信我可以提供一些可能有幫助的提示。

首先反駁@StickGrinder:

請勿關係使用蒙戈!如果Mongo不是爲了管理而設計的,那就是關係。

MongoDB中可以處理的關係完全沒有問題它是所有關於你怎麼看關係作爲被管理

事實上,在某些場景中,MongoDB可以處理關係以及RDBMS,當然,對於服務器端參照完整性,RDBMS可以通過MongoDB來管理MongoDB,但這是您需要判斷的;至於這是否對你有意義。

至於託管解決方案MySQL實際上並不那麼受人喜歡,確實SQL更容易提供實例,但MySQL仍然是一種技術,你只能在大多數時間以基本形式獲得並相信我,你不會您不想在這些服務上託管您的數據。 AWS最近推出了一個完全可擴展的MySQL實例,因此可以進行研究。

MongoDB有很多從MongoLabs到ObjectRocket的提供程序,許多Web託管提供程序(如AWS和Heroku)都提供了對MongoDB程序包的輕鬆訪問。在AWS上,您可以獲得完整的雲模板,這些模板將爲副本碎片預先設置一個便宜的(相比於託管多少應該花費的)集羣。

因此,託管並不是一個真正的問題,如果您需要它,您可以快速到達它。

今天,繼續使用映射關係像MySql這樣的RDMS或更好地使用像OrientdDb這樣的圖形數據庫還是像MongoDb這樣的面向文檔的數據庫是有意義的?

這種說法,缺乏進一步的觀察上讓我相信你的問題缺乏研究。

圖形數據庫在映射特定類型的關係,更具體地說是網絡上的個人之間的社會關係時非常強大,而像MySQL這樣的RDBMS擅長映射所有關係,但並不是最好的。

我覺得這是更好地在MySQL中實體和實體之間的關係在OrientDb或MongoDB中

爲什麼有單獨的科技股的工作?如果這是你的強項,那就去MySQL吧。 MySQL將滿足您的需求。

期間,我可以複製它的一些數據的管理關係,避免幾十個表之間的連接的實體的插入避免了巨大的索引,並在MySQL更快的插入/更新。

拆開你的技術人員會給你所謂的「可操作的毛球」。這可以保持系統之間的一致性,這是你必須管理的。

如果您需要快速訪問對象以進行顯示或其他任何操作,那麼只需將它們的緩存存儲在memcached中,或者如果您真的需要將其緩存起來,我認爲您通過分解技術來看待這種錯誤。

這是幾個指針。