将评论和文章放在一起,这里我有一个疑问,当评论数量很大以后,会不会导致在查询文章列表页的时候效率低下?
如果将comments
剥离到另一个collection
里,这样是不是能缓解只显示文章列表的情况下的压力
{ "_id" : ObjectId(), "author" : "", "comment_num" : "", "comments" : [ { "text" : "", "created" : ISODate(), "author" : "" }, ], "created" : ISODate(), "text" : "", "title" : "" }
@halty membuat perkara yang baik, jangan bersetuju sepenuhnya dengannya. Jika tidak banyak komen, reka bentuk yang disatukan adalah sesuai, dan apa yang dikatakan di atas sangat bagus. Tetapi jika terlalu banyak komen, masalah timbul. Yang paling penting ialah dua titik permulaan asas: 1. Cakera keras terlalu perlahan; 2. Selagi data dalam ingatan, tiada masalah.
Apabila data adalah sangat besar, banyak data perlu dibaca pada cakera, kerana Fail Dipetakan Memori akan disimpan dalam memori, tetapi kami hanya memerlukan sebahagian kecil daripadanya Masalah utama ialah OS mungkin halaman data lain ke cakera keras. Hanya untuk menyenaraikan artikel, memori tidak digunakan dengan cekap.
Pada fail cakera, jika dokumen terus berkembang lebih lama dan lebih panjang, berkali-kali, ini bukan perkara yang baik. Kerana jika data baharu ditambah, sebagai contoh, ulasan baharu ditambah, dokumen menjadi lebih besar dan tidak boleh muat di tempat asal, jadi tempat baharu perlu dicari, dan lubang sebelumnya akan digunakan semula. Tetapi masalahnya ialah apabila lokasi dokumen berubah, semua indeks yang berkaitan dengannya mesti berubah. Jika anda juga mempunyai indeks pada tatasusunan, seperti nama pengguna yang menyiarkan ulasan, maka indeks yang dikemas kini akan dikaitkan secara linear dengan panjang tatasusunan.
Orang di atas memberikan pandangan yang baik tentang perkara ini. Had atas 16MB.
Ringkasnya, apabila terdapat terlalu banyak komen, ia akan menjejaskan prestasi.
Ringkasan, reka bentuk skema harus dipertimbangkan
find
pertama di atas sebenarnya bukan masalah besar. Oleh kerana komen pada artikel popular selalu dibaca oleh ramai orang, adalah baik untuk menyimpannya dalam ingatan. Jika dokumen semakin panjang, MongoDB akan memperuntukkan lebih banyak ruang cakera secara automatik apabila memperuntukkannya.Setelah berkata demikian, saya fikir kebanyakan aplikasi ini tidak akan mempunyai lebih daripada seratus komen... Pada masa ini, satu dokumen akan mengambil kesempatan daripadanya, dan masalahnya subjek tidak menjadi masalah. Saya harap permohonan penulis dapat melebihi angka ini...
Pertama sekali, pastikan bahawa apabila bilangan komen adalah besar, ia tidak akan membawa kepada ketidakcekapan apabila membuat pertanyaan pada halaman senarai artikel. Anda boleh menentukan bahawa dokumen dalam set hasil pertanyaan hanya mengembalikan sebahagian daripada data medan (perlu diperhatikan bahawa jika anda mengemas kini dan kemudian menyimpan dokumen sedemikian yang hanya mengandungi sebahagian daripada data medan, ralat mungkin berlaku). disyorkan dan boleh dilakukan dengan mudah.
Selain itu, pada masa ini MongoDB mempunyai had pada saiz satu dokumen Jika terdapat terlalu banyak ulasan, ia mungkin melebihi had saiz lalai dokumen Pada masa ini, ulasan itu perlu dilucutkan.