数据库设计 - mongodb文章和评论放在同一条数据里效率怎样?
黄舟
黄舟 2017-04-21 10:57:50
0
2
624

将评论和文章放在一起,这里我有一个疑问,当评论数量很大以后,会不会导致在查询文章列表页的时候效率低下?
如果将comments剥离到另一个collection里,这样是不是能缓解只显示文章列表的情况下的压力

{
	"_id" : ObjectId(),
	"author" : "",
	"comment_num" : "",
	"comments" : [
		{
			"text" : "",
			"created" : ISODate(),
			"author" : ""
		},
	],
	"created" : ISODate(),
	"text" : "",
	"title" : ""
}
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

membalas semua(2)
大家讲道理

@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.

  1. cari
    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.
  2. masukkan
    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.
  3. saiz
    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

  1. Skala data, selagi data yang kerap diakses berada dalam ingatan, tiada masalah untuk mengaksesnya. Penggunaan memori yang tidak mencukupi yang dinyatakan dalam 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.
  2. Serasi dengan Corak Akses. Menulis komen adalah terlalu kecil berbanding dengan membaca artikel dan data Twitter ialah purata tweet adalah 5K/s dan garis masa bacaan ialah 300K/s. Asalkan permintaan baca boleh dipuaskan dalam ingatan. Menggunakan MongoDB menghapuskan keperluan untuk caching tambahan. Tidak kira sama ada temuduga itu benar-benar besar atau terlalu banyak artikel, senang untuk berkata. Pada hari itu, sharding MongoDB akan berguna.
  3. Mudah untuk dibangunkan Kos produk bukan sahaja kos perkakasan mesin dan rangkaian, tetapi yang lebih penting, kos pembangunan pengaturcara, dan gajinya sangat tinggi... Oleh itu, ia juga sangat penting untuk menulisnya dengan cepat, mudah dan tidak terdedah kepada kesilapan, bukan? Ini menjelaskan mengapa fleksibiliti model dokumen MongoDB dipuji secara meluas.

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.

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