mongodb使用find查询获取的游标是否可以遍历出查询执行后的数据库新增的记录
phpcn_u1582
phpcn_u1582 2017-04-24 16:00:18
0
2
1083

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

phpcn_u1582
phpcn_u1582

membalas semua(2)
Ty80

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.

曾经蜡笔没有小新

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.

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