我正在構建一個需要可擴展的Web應用程序。簡而言之:組合mysql mongodb
我們得到了用戶,用戶有朋友,所以他們得到了一個好友列表。用戶可以創建消息,並且朋友的消息顯示在主頁上,每條消息都鏈接到一個位置,這些消息可以按日期過濾,例如,我想顯示昨天發佈的來自朋友的所有消息,或者向我顯示來自位置X的所有消息。
我正在MongoDb中完全構建應用程序,但是我正在陷入困境。例如:
- 在炫魅,我們得到了用戶的朋友的郵件列表,沒有問題,我們使用:
$ DB->消息 - >找到(陣列(」 users._id'=> array('$ in'=> $ userFriendListGoesHere)));
所以後來我們得到了我們的消息,但是在那之後,每封郵件都有一個位置,所以我必須通過所有的消息,使一個循環,並從另一個收集得到的位置,也多個用戶可以綁定到一個消息,所以我們還必須從另一個集合中獲取所有用戶數據,在MySql中只需一個連接查詢,在MongoDb 2循環中,這是我的第一個問題:這是一個問題嗎?這是否需要大量資源,循環?
所以我的想法是與MySql和MongoDb分離,我使用MongoDb來存儲所有位置(因爲它超過了350.000+個位置並使用lat長計算)和MySql的消息,用戶和用戶的朋友,所以第二個問題,你能幫我做出決定嗎,我應該繼續使用MongoDb嗎?或者使用組合?
感謝您的閱讀和您的時間。
在SQL中,您進行一個查詢,並輸出N個結果。通過這種設置,您可以進行一次查詢,獲得N個結果,並使另外的RPC查找額外的數據。這幾乎可以肯定是延遲/流量衝擊與在SQL本地執行衝擊相比,通過額外往返數量。也就是說,這些查找中的每一個都應該相對便宜,並且無論如何都要將數據流式傳輸回去(例如,顯示第一個N,然後在滾動時執行AJAX請求以獲取下一個N等等),這當然是可行的。 。)這可能會抵消它。 – James
如果我加入4個表,服務器必須做4個索引查找+數據查找+一堆內存中的''循環。如果你在Mongo中這樣做,你仍然可以做4個索引查找+數據查找+ for循環。由於重複(在連接中固有),SQL響應通常需要更多的數據。 Mongo需要更多的查詢。謎題中最慢的部分是驅動器,但這些看起來差不多,所以這成爲4個小查詢與1個大查詢或延遲與吞吐量的問題。我真的不確定哪個更好,延遲或吞吐量。 –