Pertama, mari kita bandingkan apel dengan apel:Membaca dan menulis dengan MongoDB seperti membaca dan menulis tunggal dengan kunci utama pada tabel tanpa indeks non-cluster dalam RDBMS.
Jadi mari kita benchmark persis seperti itu:http://mysqlha.blogspot.de/2010/09/mysql-versus-mongodb-yet-another-silly.html
Dan ternyata, perbedaan kecepatan dalam perbandingan yang adil dari operasi primitif yang sama persis tidak besar. Faktanya, MySQL sedikit lebih cepat. Menurut saya, mereka setara.
Mengapa? Karena sebenarnya, kedua sistem melakukan hal serupa di benchmark khusus ini. Mengembalikan satu baris, yang dicari dengan kunci utama, sebenarnya tidak terlalu berhasil. Ini adalah operasi yang sangat cepat. Saya menduga bahwa overhead komunikasi lintas proses adalah bagian besar darinya.
Dugaan saya adalah, bahwa kode yang lebih disetel di MySQL melebihi overhead MongoDB yang sedikit kurang sistematis (tidak ada kunci logis dan mungkin beberapa hal kecil lainnya).
Ini mengarah pada kesimpulan yang menarik:Anda dapat menggunakan MySQL seperti database dokumen dan mendapatkan kinerja yang sangat baik darinya.
Jika pewawancara berkata:"Kami tidak peduli dengan dokumen atau gaya, kami hanya membutuhkan database yang jauh lebih cepat, menurut Anda apakah kami harus menggunakan MySQL atau MongoDB?", apa yang akan saya jawab?
Saya akan merekomendasikan untuk mengabaikan kinerja sejenak dan melihat kekuatan relatif dari kedua sistem. Hal-hal seperti penskalaan (naik) dan replikasi muncul di pikiran untuk MongoDB. Untuk MySQL, ada lebih banyak fitur seperti kueri kaya, model konkurensi, perkakas dan kedewasaan yang lebih baik, dan banyak lagi.
Pada dasarnya, Anda dapat menukar fitur untuk kinerja. Apakah bersedia melakukan itu? Itu adalah pilihan yang tidak bisa dibuat secara umum. Jika Anda memilih performa dengan biaya berapa pun, pertimbangkan untuk menyetel MySQL terlebih dahulu sebelum menambahkan teknologi lain.
Inilah yang terjadi ketika klien mengambil satu baris/dokumen dengan kunci utama. Saya akan menjelaskan perbedaan antara kedua sistem:
- Klien membuat perintah biner (sama)
- Klien mengirimkannya melalui TCP (sama)
- Server mem-parsing perintah (sama)
- Server mengakses paket kueri dari cache (hanya SQL, bukan MongoDB, bukan HandlerSocket)
- Server meminta komponen B-Tree untuk mengakses baris (sama)
- Server mengambil kunci hanya-baca fisik pada jalur B-Tree yang mengarah ke baris (sama)
- Server mengambil kunci logis pada baris (hanya SQL, bukan MongoDB, bukan HandlerSocket)
- Server membuat serial baris dan mengirimkannya melalui TCP (sama)
- Klien menghapus serialnya (sama)
Hanya ada dua langkah tambahan untuk RDBMS berbasis SQL biasa. Itulah sebabnya sebenarnya tidak ada perbedaan.