cari

Rumah  >  Soal Jawab  >  teks badan

mongodb使用find查询获取的游标是否可以遍历出查询执行后的数据库新增的记录

mongodb使用find查询返回的游标,是否可以遍历出查询执行后(记录比较多查询时间比较长,此时查询还未执行完)数据表新增的记录。
例如:
线程A在时间点t1使用find查询数据表user返回游标,遍历数据记录。
线程B在时间点t2使用insert向数据表user插入记录。
线程B在时间点t3执行完成。
线程A在时间点t4执行完成。
时间:t1 < t2 < t3 < t4
问:线程A是否可以查询到线程B新增的记录?

phpcn_u1582phpcn_u15822890 hari yang lalu1178

membalas semua(2)saya akan balas

  • PHP中文网

    PHP中文网2017-04-24 16:02:18

    Ini adalah soalan yang sangat bagus, secara ringkasnya MongoDB tidak menjamin sama ada hasilnya mengandungi dokumen baharu kerana ia melibatkan berbilang dokumen, malah dokumen yang mungkin akan dimasukkan pada masa hadapan. Dalam pangkalan data tradisional, adalah mungkin untuk membaca nilai yang baru dimasukkan Anomali ini dipanggil Phantom Tahap pengasingan yang boleh memenuhi ini ialah yang boleh disiri (boleh bersiri), iaitu Dalam contoh, dua set operasi, satu bacaan. dan satu tulisan, nampaknya dilakukan satu demi satu. Kos melaksanakan mekanisme kunci juga sangat tinggi, dan prestasinya agak lemah. Lihat kertas ini. Kembali ke MongoDB, MongoDB menggunakan dokumen sebagai unit dan boleh memastikan pengasingan peringkat dokumen, tetapi ia tidak menjamin pengasingan (kebebasan) operasi antara berbilang dokumen, dan tidak menyokong transaksi, sebagai pertukaran untuk prestasi tinggi.

    @huandu betul Apabila anda menguji, gunakan find().batchSize(2) untuk membaca 2 dokumen dalam setiap kumpulan, dan anda akan mendapati bahawa dokumen yang baru ditambah boleh dibaca. BatchSize lalai dalam cangkerang ialah 20, yang mungkin tidak mudah untuk diperhatikan. Jangan gunakan batchSize(1), yang sama dengan limit() atas sebab sejarah.

    balas
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-04-24 16:02:18

    Tidak semestinya.

    Kursor mongodb tidak mempunyai pengasingan dan mungkin mengembalikan data yang dikemas kini.

    Walau bagaimanapun, semasa percubaan sebenar, didapati bahawa tidak kira bagaimana cara dimasukkan, kursor tidak dapat mengembalikan data yang baru dimasukkan. Ini mungkin perincian pelaksanaan mongodb, atau mungkin kursor hanya boleh mengakses data yang baru dimasukkan dalam keadaan khas tertentu Secara ringkasnya, tiada sokongan dokumentasi dan tingkah laku ini tidak boleh dipercayai.

    balas
    0
  • Batalbalas