Anda menggunakan MongoDB untuk menyimpan ID. Ini adalah negara bagian. Generasi ID adalah fungsi. Anda menggunakan Mongodb untuk menghasilkan ID ketika proses mongodb mengambil argumen dari fungsi dan mengembalikan ID yang dihasilkan. Ini bukan apa yang Anda lakukan. Anda menggunakan nodejs untuk menghasilkan ID.
Jumlah utas, atau lebih tepatnya loop acara sangat penting karena mendefinisikan arsitektur tetapi dengan cara apa pun Anda tidak memerlukan transaksi. Transaksi di mongodb disebut "transaksi multi-dokumen" persis untuk menyoroti bahwa mereka dimaksudkan untuk memperbarui beberapa dokumen sekaligus secara konsisten. Paragraf pertama https://docs.mongodb.com/manual/core/transactions / memperingatkan Anda bahwa jika Anda memperbarui satu dokumen, tidak ada ruang untuk transaksi.
Aplikasi berulir tunggal tidak memerlukan sinkronisasi apa pun. Anda dapat dengan andal membaca ID terbaru yang dihasilkan saat memulai dan menjamin ID unik dalam proses nodejs. Jika Anda mengecualikan mongodb dan I/O lainnya dari fungsi pembuatan, Anda akan membuatnya sinkron sehingga Anda dapat mempertahankan status ID dalam proses nodejs dan menjamin keunikannya. Setelah dibuat, Anda dapat bertahan di dalam db secara tidak sinkron. Dalam skenario terburuk, Anda mungkin memiliki celah dalam nomor urut tetapi tidak ada duplikat.
Jika ada kemungkinan sekecil apa pun bahwa Anda mungkin perlu meningkatkan hingga lebih dari 1 proses nodejs untuk menangani lebih banyak permintaan simultan atau menambahkan Host lain untuk redundansi di masa mendatang, Anda perlu menyinkronkan pembuatan ID dan Anda dapat menggunakan indeks unik Mongodb untuk itu. Fungsi itu sendiri tidak banyak berubah, Anda masih menghasilkan ID seperti pada arsitektur utas tunggal tetapi menambahkan langkah ekstra untuk menyimpan ID ke mongo. Dokumen harus memiliki indeks unik pada bidang ID, jadi jika terjadi pembaruan bersamaan, salah satu kueri akan berhasil menambahkan dokumen dan kueri lainnya akan gagal dengan "E11000 duplikat kunci kesalahan". Anda menangkap kesalahan seperti itu di sisi nodejs dan mengulangi fungsinya lagi dengan memilih nomor berikutnya: