cari

Rumah  >  Soal Jawab  >  teks badan

mongodb - kiraan pymongo lambat

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.

PHPzPHPz2750 hari yang lalu1211

membalas semua(1)saya akan balas

  • 迷茫

    迷茫2017-05-17 10:05:55

    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.

    balas
    0
  • Batalbalas