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

Bisakah bidang daftar menjadi kunci pecahan di MongoDB?

Berdasarkan beberapa umpan balik yang saya dapatkan yang tampaknya menegaskan bahwa tidak mungkin untuk melakukan shard menggunakan bidang daftar sebagai kunci shard, saya ingin menggambarkan bagaimana kasus penggunaan ini dapat di-sharding menggunakan batasan MongoDB:

Objek asli:

widget:
{
    primary_key: '2389sdjsdafnlfda'

    categories: ['hair', 'nails', 'dress']
    colors:     ['red', 'white']

    #All the other fields in the document that don't need to be queried upon: 
    ...
    ...
}

Lapisan data membagi objek menjadi beberapa objek penunjuk berdasarkan jumlah elemen dalam bidang yang dipilih untuk kunci pecahan:

widget_pointer:
{
    primary_key: '2389sdjsdafnlfda'
    categories: 'hair',
    colors:     ['red', 'white']
}

widget_pointer:
{
    primary_key: '2389sdjsdafnlfda'
    categories: 'nails',
    colors:     ['red', 'white']
}

widget_pointer:
{
    primary_key: '2389sdjsdafnlfda'
    categories: 'dress',
    colors:     ['red', 'white']
}

Penjelasan:

  • Bidang categories sekarang bisa menjadi kunci pecahan di MongoDB.
  • Objek asli sekarang akan disimpan di penyimpanan nilai kunci. Kueri terhadap data di MongoDB akan mengembalikan objek pointer yang akan digunakan untuk mendapatkan objek dari penyimpanan nilai kunci.
  • Kueri pada data MongoDB hanya akan mengenai satu pecahan.
  • Penyisipan pada data MongoDB akan mengenai shard sebanyak elemen dalam daftar, dalam banyak kasus, hanya sebagian kecil dari jumlah total shard yang akan terpengaruh.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongorestore dari standalone ke replicaset

  2. Terhubung ke MongoDB Atlas Cluster db dengan aplikasi asli-reaksi

  3. Bagaimana cara mengganti nama jalur sebagai tanggapan atas populasi

  4. Menyortir hasil kueri berdasarkan urutan item dalam larik kondisi yang disediakan di Mongoose

  5. Grup Mongo berdasarkan bulan menggunakan waktu milidetik UNIX