MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Desain Skema MongoDB:Selalu Ada Skema

Desain Skema MongoDB

Ketika MongoDB diperkenalkan beberapa tahun yang lalu, salah satu fitur penting yang disebut-sebut adalah kemampuannya untuk menjadi “tanpa skema” – Apa artinya ini bagi dokumen Anda?

Desain skema MongoDB tidak menerapkan skema apa pun pada dokumen yang disimpan dalam koleksi. MongoDB pada dasarnya menyimpan dokumen JSON, dan setiap dokumen dapat berisi struktur apa pun yang Anda inginkan. Pertimbangkan beberapa contoh dari koleksi "kontak" kami di bawah ini. Berikut adalah salah satu dokumen yang dapat Anda simpan:

{
  'name':'user1',
  'address':' 1 mountain view',
  'phone': '123-324-3308',
  'SSN':'123-45-7891'
}

Sekarang dokumen kedua yang disimpan dalam koleksi dapat dalam format ini:

{
  'name': ' user2',
  'employeeid': 546789
}

Sangat keren bahwa Anda dapat menyimpan kedua dokumen ini dalam koleksi yang sama. Masalahnya, bagaimanapun, dimulai ketika Anda perlu mengambil dokumen-dokumen ini dari koleksi. Bagaimana Anda tahu jika dokumen yang diambil berisi format 1 atau format 2? Anda dapat memeriksa apakah dokumen yang diambil berisi bidang 'ssn' dan kemudian membuat keputusan. Opsi lainnya adalah menyimpan jenis dokumen di dalam dokumen itu sendiri:

{
  'type': xxx,
  'name': ....
  ...
}

Dalam kedua kasus ini, apa yang telah Anda capai adalah memindahkan penerapan skema dari database ke aplikasi -

Selalu ada skema, itu hanya pertanyaan di mana penerapannya.

Jika Anda memiliki indeks yang tepat, ini akan mengurangi masalah sampai batas tertentu. Jika sebagian besar pertanyaan Anda adalah dengan 'employeeid', Anda tahu bahwa dokumen yang diambil selalu dalam format kedua – namun, sisa kode Anda yang tidak menggunakan indeks ini masih akan memiliki masalah yang disebutkan di atas. Juga Jika Anda menggunakan ODM seperti luwak maka secara otomatis sudah memberlakukan skema untuk Anda di atas MongoDB.

Ada beberapa aplikasi yang mendapat manfaat dari fleksibilitas ini. Salah satu skenario yang terlintas dalam pikiran adalah kasus skema di mana ada sejumlah bidang/kolom opsional. Di MongoDB, tidak ada penalti karena memiliki beberapa kolom yang hilang. Setiap dokumen hanya dapat berisi bidang yang dibutuhkan.

Validasi Dokumen

Memulai versi 3.2.x MongoDB sekarang mendukung konsep validasi skema menggunakan konstruksi "validator". Ini memberikan banyak tingkat validasi – sehingga Anda dapat memilih tingkat yang sesuai untuk Anda. Perilaku default jika Anda tidak menggunakan validator adalah perilaku tanpa skema sebelumnya. Biasanya Anda akan membuat "validator" pada saat pembuatan koleksi

db.createCollection( "contacts",
   { validator: { $or:
      [
         { employeeid: { $exists: true }},
         { SSN: { $exists: true } }
      ]
   }
} )
Buat validasi skema di MongoDB sehingga Anda dapat memilih level yang Anda butuhkanKlik Untuk Tweet

Koleksi yang Ada

Koleksi yang ada dapat diperbarui menggunakan perintah 'collMod':

db.runCommand( {
  collMod: "contacts”,
  validator: { $or: [ { employeeid: { $exists: true }}, { SSN: { $exists:true} } ] }
} )

Tingkat Validasi

MongoDB mendukung konsep 'ValidationLevel'. Tingkat validasi default adalah 'ketat' yang berarti bahwa penyisipan dan pembaruan gagal jika dokumen tidak memenuhi kriteria validasi. Jika tingkat validasi 'Sedang' itu berlaku validasi ke dokumen yang ada yang memenuhi kriteria validasi. Dokumen yang ada saat ini dan tidak memenuhi kriteria tidak divalidasi. Meskipun nyaman, tingkat validasi 'Sedang' dapat membuat Anda mendapat masalah – jadi ini harus digunakan dengan hati-hati.

Tindakan Validasi

Secara default, tindakan validasi adalah 'Kesalahan'. Jika dokumen Anda gagal validasi, ini adalah kesalahan dan pembaruan/penyisipan gagal. Namun, Anda juga dapat menyetel tindakan Validasi ke 'peringatan' yang pada dasarnya mencatat pelanggaran skema di log , tetapi tidak menggagalkan penyisipan.

Contoh desain skema apa yang akan membantu Anda dalam proyek berikutnya, beri tahu kami!


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. beberapa contoh Mongo DB di server yang sama

  2. Database Cloud DIY di Amazon Web Services - Buku Putih Baru

  3. Agregasi MongoDB dengan $lookup hanya menyertakan (atau memproyeksikan) beberapa bidang untuk dikembalikan dari kueri

  4. Kembalikan Hanya Bidang Tertentu untuk Kueri di Spring Data MongoDB

  5. Impor File JSON ke MongoDB dengan mongoimport