mongodb – Pymongo-Zählung ist langsam
PHPz
PHPz 2017-05-17 10:03:55
0
1
1148

Dreißigtausend Daten, jedes Datenelement enthält nur eine Zufallszahl {„Ziffer“: Zufallszahl}
Anforderung: Zählen Sie die Zahl, die am häufigsten vorkommt
Datenbanktabelle

def main(): digits = [] for d in table.find(): n = d['digit'] digits.append(n) dig = set(digits) news = [] i = 0 for d in dig: c = table.find({"digit": d}).count() zz = (d, c) news.append(zz) print(i) i += 1 if __name__ == '__main__': start = time.time() main() print('Cost: {}'.format(time.time() - start))

Es dauert fünf oder sechs Minuten, um 100 Mal zu laufen. Der Lüfter ist auch sehr laut ...
Was ist die richtige Haltung?

PHPz
PHPz

学习是最好的投资!

Antworte allen (1)
迷茫

正确的姿势是使用aggregation.

db.table.aggregate([ {$group: {_id: "$digit", count: {$sum: 1}}}, // 统计每个数字出现的次数 {$sort: {count: -1}}, // 逆序排列 {$limit: 1} // 取第1条记录 ]);

$group的用户可以参考文档。
需要注意的是,这样的需求现实当中出现的可能性不高,估计你这是一道练习题目。实际上就算使用了Aggregatoin,仍然需要遍历整个集合的所有数据才有可能找出出现最多的数字,所以当集合总记录数比较大的时候,这样的全表遍历操作怎么样都不可能会快,通常也只有在OLAP场景下才有这样的查法,而OLAP通常对速度要求不高。所以仅从理论上讨论,应该使用aggregation framework,但是真实需求还是需要再做具体分析。

    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!