Apakah sharding efektif untuk koleksi kecil?

11

Sepertinya database sharding sangat bagus jika saya memiliki koleksi besar. Bagaimana jika saya memiliki banyak koleksi berukuran cukup? Katakanlah untuk 1 koleksi 100 000 000 dokumen (komentar yang tidak terlalu besar) sharding efektif. Apakah ini juga efektif untuk 10.000 koleksi dengan masing-masing 10.000 dokumen?

(Saya pikir pertanyaan ini masih berlaku untuk database berorientasi tabel jika Anda mengganti koleksi dengan tabel dan dokumen dengan baris. Jika mungkin, saya ingin mengetahui jawaban teoretis serta jawaban dalam skenario MongoDB tertentu, jika berbeda dari teori menjawab.)

João Pinto Jerónimo
sumber

Jawaban:

5

Apakah ini juga efektif untuk 10.000 koleksi dengan masing-masing 10.000 dokumen?

Sebagian besar orang memiliki masalah "koleksi tunggal besar" dan karenanya pecahan jelas berguna untuk mengurangi sakit kepala saat menyeimbangkan data ini.

Namun, ketika Anda memiliki 10.000 koleksi kecil, sakit kepala Anda mungkin tidak "menyeimbangkan data". Dengan banyak koleksi kecil ini, masalah Anda mungkin tentang melacak koleksi ini. Tergantung pada ukuran dokumen Anda, Anda mungkin tidak melanggar batas bawah agar sharding benar-benar terjadi.

Untuk koleksi yang sangat kecil, Anda dapat menggunakan perintah movePrimary yang kurang dikenal untuk mengelola lokasi data Anda.

Tentu saja, cara lain untuk melihat ini adalah mengapa Anda memiliki koleksi 10k? Koleksi tidak membutuhkan objek yang homogen dan dengan koleksi 10k kebanyakan harus dihasilkan. Sangat mungkin untuk menyimpan "jenis" data yang berbeda dalam koleksi yang sama, mengurangi jumlah koleksi dan kemudian memasukkan jenis sebagai bagian dari kunci beling.

Gates VP
sumber
Terima kasih, saya benar-benar berusaha untuk mengetahui apakah yang terbaik yang bisa saya lakukan adalah menyingkirkan banyak koleksi ini dan membuat yang besar. Saya memiliki banyak koleksi sebelumnya karena saya mendengar kepercayaan yang sama: "Koleksi besar buruk bagi Anda karena indeks tidak sesuai dengan RAM dan akan sangat lambat untuk meminta dan memperbaruinya". Tapi kurasa sharding diciptakan untuk menyelesaikan masalah itu ... Terima kasih !!
João Pinto Jerónimo
Jujur, saya menemukan bahwa Anda sering dapat "menipu" pada indeks juga. Jika Anda memiliki dua koleksi foodan bardengan struktur data yang sama, Anda dapat menggabungkan mereka ke dalam bazkoleksi dan menimpa _ids(dalam kode): { _id: "foo123" }, { _id: "bar123" }. Anda memiliki indeks yang lebih besar, tetapi Anda hanya memiliki satu indeks yang menyertakan jenisnya. Bukan keharusan, hanya "makanan untuk dipikirkan".
Gates VP
4

Karya pecahan MongoDB dengan memecah koleksi menjadi 'bongkahan' yang lebih kecil dan mendistribusikannya secara merata di sejumlah mesin. Ukuran chunk default, yang umumnya paling efisien, adalah 200MB. Jadi, kecuali koleksi tumbuh lebih besar dari 200MB, ia tidak akan terpecah menjadi beberapa bagian, dan karena itu tidak akan memenuhi syarat untuk sharding, jadi tidak akan ada manfaatnya.

Dalam kasus umum, membagikan data melalui beberapa mesin adalah cara yang sangat efektif untuk menskala membaca, menulis, dan query. Anda mendapatkan manfaat dari banyak CPU, hard disk, dan penyimpanan memori, bekerja secara paralel untuk membaca, menulis, dan memproses data. Memilah memori sangat penting untuk MongoDB, di mana kinerja tinggi sangat sensitif terhadap pemasangan data dalam memori.

Chris Fulstow
sumber
Ukuran potongan bawaan FYI adalah 64MB pada 1,8.
Gates VP