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

mongodb bagian dari objectid kemungkinan besar unik

Jika Anda memiliki beberapa server web, dengan banyak proses, maka sebenarnya tidak ada sesuatu yang dapat Anda hapus dengan kehilangan keunikan.

Jika Anda melihat sifat dari ObjectId :

  • nilai 4-byte yang mewakili detik sejak zaman Unix,
  • pengidentifikasi mesin 3 byte,
  • id proses 2 byte, dan
  • penghitung 3 byte, dimulai dengan nilai acak.

Anda akan melihat tidak banyak yang dapat Anda hapus dengan aman. Karena 4 byte pertama adalah waktu, akan sulit untuk menerapkan algoritme yang menghapus bagian dari cap waktu dengan cara yang bersih dan aman.

Pengidentifikasi mesin dan pengidentifikasi proses digunakan dalam kasus di mana ada beberapa server dan/atau proses yang bertindak sebagai klien ke server basis data. Jika Anda menjatuhkan salah satu dari itu, Anda bisa berakhir dengan duplikat lagi. Nilai acak sebagai 3 byte terakhir digunakan untuk memastikan bahwa dua pengidentifikasi, pada mesin yang sama, dalam proses yang sama adalah unik, bahkan ketika sering diminta.

Jika Anda menggunakannya sebagai pesanan id , dan Anda ingin memastikan keunikan, saya tidak akan memangkas apa pun dari angka 12 byte karena angka tersebut dirancang dengan cermat untuk menyediakan mekanisme terdistribusi yang kuat dan efisien untuk menghasilkan angka unik ketika ada banyak klien database yang terhubung.

Jika Anda mengambil 5 karakter terakhir dari ObjectId ..., dan dalam periode tertentu, berapa kemungkinan konflik?

  • id proses
  • konter

Probabilitas konflik tinggi . ID proses mungkin tetap sama selama seluruh periode, dan nomor lainnya hanyalah nomor tambahan yang akan berulang setelah 4095 pesanan. Tetapi, jika prosesnya didaur ulang, maka Anda juga memiliki kemungkinan akan ada konflik dengan pesanan yang lebih lama, dll. Dan jika Anda berbicara dengan banyak klien basis data, kemungkinannya juga meningkat. Aku hanya tidak akan mencoba untuk memangkas nomor. Tidak ada gunanya bagi pelanggan yang tidak senang mencoba memesan.

Bahkan stempel waktu dan nilai benih acak tidak cukup ketika ada beberapa klien basis data yang menghasilkan ObjectIds . Saat Anda mulai melihat berbagai bagian, terutama dalam konteks kumpulan klien basis data, Anda akan melihat mengapa bagian itu ada, dan mengapa menghapusnya dapat menyebabkan kehancuran di ObjectId generasi.

Saya sarankan Anda menerapkan algoritme untuk membuat nomor unik dan menyimpannya di database. Ini cukup sederhana untuk dilakukan. Memang sedikit memengaruhi kinerja, tetapi aman.

Saya menulis ini jawab beberapa waktu lalu tentang tantangan menggunakan ObjectId dalam sebuah Url. Ini mencakup tautan ke cara membuat nomor penambahan otomatis unik menggunakan MongoDB.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara memformat data dalam Model sebelum menyimpan di Mongoose (ExpressJS)

  2. Pengindeksan Mongodb untuk agregat

  3. Node.js Mongoose .update dengan ArrayFilters

  4. findAndModify atau findOneAndUpdate - bukan fungsi

  5. MongoDB:Temukan elemen minimum dalam array dan hapus itu