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

Desain Skema database Mongodb dengan data bersama

Tantangan Anda berasal dari fakta bahwa Prop_Info harus diambil oleh kedua kueri. Hal ini membuat sulit untuk mengetahui koleksi Mongo mana yang harus digunakan.

Di MongoDB, Anda membuat skema dokumen Anda dengan tujuan ideal untuk satu dokumen memiliki semua informasi yang Anda butuhkan dengan pola kueri Anda. Jika Anda perlu memiliki data yang sama D (seperti Prop_Info dalam kasus Anda) dikembalikan oleh dua kueri terpisah terhadap dua koleksi terpisah A dan B , Anda harus memilih di antara tiga strategi berikut:

  1. Duplikat D dalam dokumen keduanya A dan B , dan terapkan konsistensi dengan kode Anda. Ini biasanya merupakan pilihan desain sistem kinerja tinggi yang ingin menghilangkan kebutuhan untuk kueri kedua bahkan jika itu harus mengorbankan kompleksitas kode tambahan di sisi penyisipan/pembaruan dan dengan beberapa masalah konsistensi potensial karena Mongo bukan ACID.

  2. Masukan D di A dan simpan referensi (DBRef atau kombinasi bidang pengenal lainnya) di B sehingga Anda dapat melakukannya dengan kueri kedua. Ini biasanya merupakan pilihan desain ketika jumlah kueri ke A melebihi jumlah kueri ke B . Itu membuat D lokal ke koleksi yang lebih sering ditanyakan. Dalam pola desain skema ini Anda hanya perlu membuat kueri kedua saat Anda membuat kueri B .

  3. Masukan D dalam koleksi baru C dan buat kueri kedua dari keduanya A dan B . Ini biasanya merupakan pilihan desain dalam menghadapi persyaratan masa depan yang sangat tidak pasti di mana tidak jelas apa pertukarannya jika Anda menggunakan (1) atau (2) di atas. Ini adalah skema yang paling "seperti relasional" dan skema yang akan memaksa Anda untuk membuat kueri kedua saat Anda menanyakan keduanya A dan B .

Strategi mana yang Anda pilih bergantung pada domain Anda, pola kueri, dukungan yang Anda dapatkan dari kerangka kerja pemetaan relasional objek (ORM) (jika Anda menggunakannya), dan yang terakhir, preferensi Anda.

Dalam situasi yang saya temui, saya tidak pernah memilih (3). Saya telah menggunakan (1) dalam situasi kinerja tinggi (sistem analitik). Saya telah menggunakan (2) di tempat lain karena pola akses kueri telah memperjelas di mana data "bersama" seharusnya berada.

Setelah Anda memilih strategi, jika Anda masih memerlukan bantuan, kirimkan pertanyaan SO lain yang secara khusus berfokus pada masalah desain skema dengan strategi yang dipilih.

Tiga kiat terakhir:

  1. Jika data yang dibagikan D memiliki multiplisitas hubungan lebih besar dari 1 menggunakan array. Anda dapat mengindeks seluruh array dan Anda dapat melakukan kueri secara tepat di dalam array menggunakan $elemMatch .

  2. Untuk memperbarui D dalam strategi (1) atau (2) gunakan pengubah atom dari MongoDB operasi , banyak di antaranya dirancang untuk beroperasi pada array.

  3. Pertanyaan BEGITU mencakup pola kueri dua DBRef dalam jawaban @ Stennie. (@Stennie bekerja untuk 10gen, penanda MongoDB.)

Semoga beruntung!



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kueri Mongodb pada elemen array bersarang

  2. perutean paspor node.JS Express

  3. MongoDB/Node Aneh Jelaskan Hasil

  4. MongoDB dengan redis

  5. Indeks Teks MongoDB di semua Bidang menggunakan Java