TL;DR:String mungkin lebih aman pilihan, dan perbedaan kinerja harus diabaikan. Bilangan bulat masuk akal untuk koleksi besar di mana enum harus diindeks. YMMV.
Benar.
Ini adalah manfaat utama bilangan bulat menurut saya. Namun, Anda juga harus memastikan nilai yang terkait dari enum
jangan berubah. Jika Anda mengacaukannya, Anda hampir pasti akan mendatangkan malapetaka , yang merupakan kerugian besar.
Jika Anda benar-benar menggunakan tipe data enum, itu mungkin semacam integer secara internal, jadi integer harus membutuhkan lebih sedikit pemrosesan. Either way, overhead itu harus diabaikan.
Saya mengulangi banyak dari apa yang telah dikatakan, tetapi mungkin itu membantu pembaca lain. Kesimpulannya:
- Mencampur peta nilai enum akan mendatangkan malapetaka. Bayangkan
Declined
your Anda status tiba-tiba ditafsirkan sebagaiAccepted
, karenaDeclined
memiliki nilai '2' dan sekarangAccepted
karena Anda menyusun ulang enum dan lupa menetapkan nilai secara manual... (bergidik ) - String lebih ekspresif
- Bilangan membutuhkan lebih sedikit ruang. Ruang disk biasanya tidak masalah, tetapi ruang indeks akan memakan RAM yang mahal.
- Pembaruan bilangan bulat tidak mengubah ukuran objek. String, jika panjangnya sangat bervariasi, mungkin memerlukan realokasi. Namun, padding string dan faktor padding seharusnya dapat mengatasi hal ini.
- Integer dapat berupa flag (belum dapat ditanyakan (belum), sayangnya, lihat SERVER-3518 )
- Bilangan bulat dapat ditanyakan dengan
$gt
/$lt
sehingga Anda dapat secara efisien mengimplementasikan$or
. yang kompleks kueri, meskipun itu adalah persyaratan yang agak misterius dan tidak ada yang salah dengan$or
pertanyaan...