mongodb - kiraan pymongo lambat
PHPz
PHPz 2017-05-17 10:03:55
0
1
1208

Tiga puluh ribu keping data, setiap keping data hanya mengandungi nombor rawak {"digit": nombor rawak}
Keperluan: Kira nombor yang paling kerap muncul
Jadual pangkalan data

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))

Ia mengambil masa lima atau enam minit untuk berlari sekali menggunakan multi-threading untuk berlari 100 tidak jauh lebih laju.

PHPz
PHPz

学习是最好的投资!

membalas semua(1)
迷茫

Postur yang betul ialah menggunakan agregasi.

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

Pengguna $group boleh merujuk kepada dokumentasi.
Perlu diingatkan bahawa kemungkinan permintaan sedemikian muncul dalam realiti adalah tidak tinggi Dianggarkan bahawa ini adalah soalan latihan untuk anda. Malah, walaupun Aggregatoin digunakan, ia masih perlu merentasi semua data dalam keseluruhan koleksi untuk mencari nombor paling kerap Oleh itu, apabila jumlah rekod dalam koleksi agak besar, operasi lintasan jadual penuh seperti itu tidak boleh pantas. Kaedah carian jenis ini biasanya hanya tersedia dalam senario OLAP dan OLAP biasanya tidak mempunyai keperluan kelajuan tinggi. Oleh itu, hanya dari perbincangan teori, rangka kerja pengagregatan harus digunakan, tetapi keperluan sebenar masih memerlukan analisis terperinci.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan