Anda harus memilih opsi 1.
Alasan utamanya adalah karena Anda mengatakan bahwa Anda khawatir tentang kinerja - menggunakan indeks _id yang selalu ada dan sudah unik akan memungkinkan Anda menghemat karena harus mempertahankan indeks unik kedua.
Untuk opsi 1, saya khawatir tentang kinerja penyisipan yang dilakukan untuk memiliki kunci yang tidak berurutan. Saya tahu ini dapat mematikan sistem RDBMS tradisional dan saya telah melihat indikasi bahwa ini juga bisa terjadi di MongoDB.
Opsi Anda yang lain tidak menghindari masalah ini, mereka hanya menggesernya dari indeks _id ke indeks unik sekunder - tetapi sekarang Anda memiliki dua indeks, satu indeks yang benar-benar seimbang dan yang lainnya akses acak.
Hanya ada satu alasan untuk mempertanyakan opsi 1 dan itu adalah jika Anda berencana untuk mengakses dokumen hanya dengan satu atau hanya nilai UUID lainnya. Selama Anda selalu memberikan kedua nilai dan (bagian ini sangat penting) Anda selalu mengurutkannya dengan cara yang sama di semua kueri Anda, maka indeks _id akan secara efisien melayani tujuan penuhnya.
Sebagai penjabaran mengapa Anda harus memastikan bahwa Anda selalu mengurutkan kedua nilai UUID dengan cara yang sama, saat membandingkan subdokumen { a:1, b:2 }
tidak sama dengan { b:2, a:1 }
- Anda dapat memiliki koleksi di mana dua dokumen memiliki nilai tersebut untuk _id. Jadi, jika Anda menyimpan _id dengan bidang a terlebih dahulu, maka Anda harus selalu menyimpan urutan itu di semua dokumen dan kueri Anda.
Perhatian lainnya adalah indeks pada _id:1
akan dapat digunakan untuk kueri:
db.collection.find({_id:{a:1,b:2}})
tapi itu tidak dapat digunakan untuk kueri
db.collection.find({"_id.a":1, "_id.b":2})