Rumah > Soal Jawab > teks badan
以前学过sql,现在在学mongodb。看到objectID各种想把它改成和sql一样从1开始auto increment的id,我就全给update了。听说并不能这样做,还是要保留mongo原有的自动生成的obectID, 但是为什么?
ringa_lee2017-05-02 09:22:25
Sebenarnya mudah untuk mendapatkan jawapan dengan menganalisis prinsip. Katakan anda mempunyai timbunan nombor di tangan anda, dari 1 hingga 100, di bawah:
Seorang lelaki datang dan meminta anda nombor, anda memberinya satu, itu tidak menjadi masalah.
Dua orang tiba bersama-sama dan kedua-duanya meminta nombor kepada anda. Perlahan-lahan datang satu persatu, hantar satu demi satu, perlahan tetapi ia akan sampai ke sana
Bagaimana jika 10 orang datang pada masa yang sama dan meminta nombor anda bagaimana dengan 100 orang?
Bayangkan bilangan orang yang datang sebagai permintaan serentak, dan tidak sukar untuk mencari bahawa memperuntukkan nombor dengan cepat telah menjadi halangan. Jadi ID yang meningkat sendiri sebenarnya bukan perkara yang baik untuk RDBMS. Tetapi mujurlah, pangkalan data tradisional berdiri sendiri Mereka hanya menambah kunci kepada diri mereka sendiri dan mengendalikan persaingan dalam ingatan, yang bukan masalah besar. MongoDB ialah pangkalan data yang diedarkan Beberapa mesin perlu menyelaras antara satu sama lain Anda mendapat 1, saya mendapat 2, dan dia mendapat 3. Kunci ini perlu diselaraskan melalui rangkaian, yang sangat tidak cekap.
Fikirkan tentang tujuan pengedaran Salah satu daripadanya adalah untuk menambah baik serentak, jadi ID kenaikan automatik dan konkurensi tinggi sebenarnya bertentangan antara satu sama lain, memastikan kenaikan yang betul pasti akan menjejaskan kecekapan. Selain itu, ID yang meningkat sendiri sebenarnya tidak mempunyai banyak kelebihan kecuali ia kelihatan lebih bersih, jadi ia tidak dapat dielakkan ditinggalkan. (Ingat bahawa ObjectID sebenarnya boleh diisih, iaitu susunan masa sisipan)
ringa_lee2017-05-02 09:22:25
https://docs.mongodb.com/v3.0/tutorial/create-an-auto-incrementing-field/#considerations
Secara amnya dalam MongoDB, anda tidak akan menggunakan corak kenaikan automatik untuk medan _id, atau mana-mana medan, kerana ia tidak menskalakan pangkalan data dengan sejumlah besar dokumen. Biasanya nilai lalai ObjectId adalah lebih sesuai untuk _id.
文档上自己说,bukan skala untuk pangkalan data dengan sejumlah besar dokumen,自增的不适合有大数量dokumen的数据库