簡體   English   中英

count()是MongoDB中的慢速操作,具體如何加速count()?

[英]count() is slow operation in MongoDB, how to speed up count() specifically?

我有一個名為ParseRequest的集合。 使用共享密鑰_id進行着色。 可能不是最好的選擇,但現在我認為這並不重要,因為Collection只有40,000個文件。 在這種情況下,我關注ParseRequest集合上有兩個屬性:processed(布爾)和解析(布爾)。

我需要運行此查詢,我希望它快速閃電:

D b。 ParseRequest.count({processed:true,parsed:true})

所以我嘗試了兩種不同的方式:

  1. 在處理和解析時使用單獨的復合鍵
  2. 包括已處理和解析為分片鍵

兩種方式都提高了性能,但還不夠,上面的count()運行時間在2-3秒左右,但我需要更快的速度。

值得注意的是,此查詢立即返回(幾毫秒):

D b。 ParseRequest.find({processed:true,parsed:true})。limit(5)

D b。 ParseRequest.count({processed:true,parsed:true})

在任一設置中仍然很慢。

還有什么我應該嘗試的嗎?

從上面的這個特定示例出發,看起來一般來說count()對於特定標准來說是MongoDB中非常昂貴的操作。 即使你有一個索引,它仍然很慢; 比獲得相同標准的前幾行要慢。 有什么理由嗎?

我來自SQL Server背景:計算count(*)在SQL Server中總是很快。 計算計數對我的應用程序很重要,我對MongoDD的挫敗感已經增長得太多了,我正在考慮單獨拋出MongoDB:為特定標准計算count()的速度很慢。 但在我這樣做之前,我想確保我用盡所有可能的方法來改善計數計算。 任何建議表示贊賞。 謝謝。

- = - = -

在幾條評論之后編輯:

我使用在Centos上運行的v2.2.6(64位)

是的,解釋說使用了idex,順便說一下,沒有索引它甚至更慢。

是的我沒有想到計算一個特定條件的count()需要掃描整個索引樹,但請原諒我的comarison到SQL Server,在SQL Server中它也是一個完整的索引,但不知何故count(*)是更快的一切否則是平等的。 那么我可以在MongoDB中使用任何技巧嗎?

我會嘗試升級至至少2.4.x版。 在2.3.2中發布了count()的性能修復程序。 https://jira.mongodb.org/browse/SERVER-1752

暫無
暫無

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

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