0
我的java應用程序使用map-reduce從MongoDB集合中檢索幾個字符串<field's name, types>
。
比如我有:出現字段的文檔數量 - MongoDB
<_id,ObjectId>
<name, String,Object>
<dateOfBirth, String,Date>
這意味着,在我的收藏有文件,其中_id
場只是一個ObjectId
,name
是String
或Object
和dateOfBirth
既可以是String
和Date
。
現在,我的目標是查找出現字段的文檔數量。所以我寫了這個Java方法
public int countFields(String s) {
DBObject query = new BasicDBObject(s,new BasicDBObject("$exists",1));
int n = coll.find(query).count();
return n;
}
此方法正確:在輸入給出表示一個字段名稱的字符串,它找到的地方串出現的文檔數。 所以,每場我有這樣的事情:
<_id, 500>
<name,340>
<dateOfBirth, 100>
這意味着_id
出現在我收藏的500個文件,name
在340和dateOfBirth
在100
假設我有運行此方法適用於集合中的所有字段:效率不高!
例如,在我的收藏中有大約30k個文檔,我對每個字段s
運行countFields(s)
方法,並且它需要大約3秒來檢索出現字段的文檔數量。
如何才能在此查詢上獲得更好的性能?
好吧,你認爲地圖是降低複雜性方面更好? – DistribuzioneGaussiana
我沒有配置文件,但我會這樣認爲。另外,如果您不需要所有字段,則可以將其限制爲特定列表。 –
不幸的是我需要所有的字段,但我要測試map-redue。感謝您的建議。 – DistribuzioneGaussiana