亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

doctrine處理分表的策略詢問

Hi,洪大師:

? ? ?我現接手一個項目的升級,因為原項目是用的symfony2做的開發,因為最初開發的時候沒有考慮數據量的問題,用了幾年之后現在要對其中的幾個表做分表處理,分表的策略商定的是對主鍵進行取?!,F在問題就出現了,因為用doctrine2的原因一個表就對應一個對象,做分表就是說要重新做map,但是我找了很多的資料,都沒有講這一塊的,我想向您請教一下這個有沒有什么好的方法可以使用。


By shanJi

正在回答

1 回答

這個問題沒有你想象的那么簡單,因為不管你最終怎么分,核心問題是分表之間的數據無法很好地整合成一個數據結果集,比如你對user表進行取模分表,如何實現搜索所有大于10歲的用戶這種簡單的操作?而且外鍵關系也會完全打亂,其他表里的user_id到底對應的是哪個user表里的id?


從項目定位上,doctrine2的dbal提供了一些簡單的sharding功能,但使用起來有很多的限制,你可以查看一下http://doctrine-orm.readthedocs.org/projects/doctrine-dbal/en/latest/reference/sharding.html


當然,如果你覺得這些限制對你來說很重要,你不想失去,那就必須按照你的特定的需求去實現一套你自己的dbal,orm的相關部分也需要改,但是這個工作量就大了,能展開的部分太多,而且和業務結合比較緊密,在此先不做展開。


除此之外,我建議你考慮使用一些mysql proxy軟件去實現這個功能,這些軟件模擬了mysql的協議,對外提供一個標準的mysql服務,對內可以連接幾個分表的真實mysql數據庫。在操作起來和使用一個mysql數據庫沒有區別,但實際上卻是由mysql proxy在操作多個不同的數據庫。這種東西應該是比較適合你的,但也有很多限制,你可以參考各自的文檔。



1 回復 有任何疑惑可以回復我~
#1

老子是山雞 提問者

非常感謝您的回復,我目前通過生命周期的鉤子和__get() 模擬的一下,暫時能夠勉強滿足需求。您說的那個自己去實現一套DBAL ,這個是在doctrine的接口上改寫?還是直接改他源碼? 有沒有相關的資料呢? 那個sharding的我看了,不是很符合我們的需求。謝謝您對我問題的解答。
2015-03-07 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

doctrine處理分表的策略詢問

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號