簡體   English   中英

Mongodb性能問題

[英]Mongodb Performance issue

我正在使用mongodb,我需要更新我的文檔,說總共有1000個。 我的文檔具有如下基本結構:

{
People:[1,2,3,4],
Place:"Auckland"
Event:"Music Show"
}

我有10,000個線程在另一個VM中同時運行。 每個線程都會查找這些文檔(1000),查看這1000個文檔是否與查詢匹配,並在People數組中推送一個數字。 假設如果找到的線程100說這1000個相關文檔中有500個,那么它將在所有500個文檔的People數組中推送數字100。 為了這,

我正在為每個線程(10000)使用命令

update.append("$push",new BasicDBObject("People",serial_number));
updateMulti(query,update);

我發現這些就地更新(多查詢)的性能很差。 這是歸因於寫鎖定的問題嗎? 每個線程(10000)更新與查詢相關的文檔嗎? -因此似乎有很多“等待”嗎?有沒有更有效的方法來執行這些“推送”操作? “ UpdateMulti”是解決此問題的正確方法嗎?

謝謝您的回應-編輯和添加更多信息

一些設計背景:

是的,您對我們問題的理解是正確的。 我們有10000個線程,每個線程代表一個“角色”,使用$ push一次最多更新1000個實體(基於適當的查詢)。

反轉模型會導致我們遇到一些破碎的用例(從我們的領域角度來看),從而導致我們跨主要實體的“狀態”(現在將分布在多個集合中)聯接-例如:這些動作中的每個動作都是針對該實體-E具有狀態(e1,e2,e3,e4,e5)-因此e1到e5表示為一個匯總數組,該數組通過10,000個代表外部應用程序動作的線程/進程進行更新。

我們需要接近實時的聚合,因為另一組“參與者”會查看e1到e5的這些“狀態”,然后通過另一個通道對“數組中的元素”進行適當的響應。

在這種情況下,什么是“理想”的設計策略-加快寫入速度。 會分片幫助-是否對此進行“量級”試探-我們應該分片鎖定的百分比等。

由於您的架構設計,這是一個問題。

$push多個值(特別是來自多個線程)的$push送到多個文檔的效率極低。 問題不僅僅在於寫鎖定,還在於您的設計使它成為了問題。 此外,您還在不斷增加文檔,這意味着更新“不到位”,並且您的收藏很快就變得支離破碎。

看來您的架構是“顛倒的”。 您有10,000個線程,希望將代表人員的數字(我假設有很多人)添加到少量文檔(1000個)中,該文檔將變得龐大。 在我看來,如果您想將某些內容嵌入其他內容,則可以考慮代表人的集合,然后嵌入發現這些人的事件-至少您將每個人的數組大小限制為最多1000個,更新將散布在大量文檔中,從而大大減少了爭用。

另一個選擇是簡單地記錄參加會議的事件/人員,然后在以后對原始數據進行匯總,但是在不確切知道您對該應用程序有什么要求的情況下,很難知道哪種方法會產生最佳結果-您擁有的方式選擇絕對是不可能給您帶來好的表現的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM