Pertanyaan Apa alasan rinci dan spesifik untuk Mengapa MongoDB jauh lebih cepat daripada DB SQL?


Ok, ada pertanyaan tentang Mengapa MongoDB Sangat Cepat

Saya menghargai jawaban-jawaban itu, namun, mereka cukup umum. Ya saya tahu:

  • MongoDB berbasis dokumen, lalu mengapa berbasis dokumen bisa mengarah ke kecepatan yang jauh lebih tinggi?
  • MongoDB adalah noSQL, tetapi mengapa noSQL berarti kinerja yang lebih tinggi?
  • SQL melakukan lebih dari MongoDB untuk konsistensi, ACID, dll, tapi saya percaya MongoDB juga melakukan sesuatu yang mirip dengan menjaga data tetap aman, mempertahankan pengindeksan, dll, kan?

Ok, saya menulis pertanyaan ini hanya untuk mencari tahu

  1. apa alasan terperinci dan spesifik untuk kinerja tinggi MongoDB?
  2. Apa persis SQL tidak, tetapi MongoDB tidak melakukannya, sehingga mendapatkan kinerja yang sangat tinggi?
  3. Jika pewawancara (ahli MongoDB dan SQL) bertanya kepada Anda "Why MongoDB is so fast", bagaimana Anda akan menjawab? Jelas hanya menjawab: "because MongoDB is noSQL" tidak cukup.

Terima kasih


32
2018-06-28 12:21


asal


Jawaban:


Pertama, mari bandingkan apel dengan apel: Membaca dan menulis dengan MongoDB seperti pembacaan tunggal dan menulis dengan kunci utama di atas meja tanpa indeks yang tidak terkelompok dalam RDBMS.

Jadi, mari patokan 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 tidak besar. Bahkan, MySQL sedikit lebih cepat. Saya akan mengatakan, mereka setara.

Mengapa? Karena sebenarnya, kedua sistem melakukan hal serupa dalam patokan khusus ini. Mengembalikan satu baris, yang dicari oleh kunci utama, sebenarnya tidak banyak berfungsi. Ini adalah operasi yang sangat cepat. Saya menduga bahwa overhead komunikasi lintas proses adalah bagian besar dari itu.

Dugaan saya adalah, bahwa semakin banyak kode yang disetel di MySQL melebihi overhead yang sedikit kurang sistematis dari MongoDB (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 luar biasa dari itu.


Jika pewawancara berkata: "Kami tidak peduli tentang dokumen atau gaya, kami hanya membutuhkan database yang jauh lebih cepat, apakah menurut Anda 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 dalam pikiran untuk MongoDB. Untuk MySQL, ada lebih banyak fitur seperti kueri kaya, model konkurensi, perkakas yang lebih baik dan kedewasaan dan banyak lagi.

Pada dasarnya, Anda dapat memperdagangkan fitur untuk kinerja. Bersedia melakukan itu? Itu adalah pilihan yang tidak bisa dibuat secara umum. Jika Anda memilih kinerja dengan biaya berapa pun, pertimbangkan tuning MySQL terlebih dahulu sebelum menambahkan teknologi lain.


Inilah yang terjadi ketika klien mengambil satu baris / dokumen dengan kunci primer. Saya akan membubuhi keterangan perbedaan antara kedua sistem:

  1. Klien membuat perintah biner (sama)
  2. Klien mengirimkannya melalui TCP (sama)
  3. Server mem-parsing perintah (sama)
  4. Server mengakses rencana permintaan dari cache (hanya SQL, bukan MongoDB, bukan HandlerSocket)
  5. Server meminta komponen B-Tree untuk mengakses baris (sama)
  6. Server mengambil kunci fisik hanya-baca di jalur B-Tree yang mengarah ke baris (sama)
  7. Server mengambil kunci logis pada baris (hanya SQL, bukan MongoDB, bukan HandlerSocket)
  8. Server melakukan serialisasi deretan dan mengirimnya melalui TCP (sama)
  9. Klien deserializes itu (sama)

Hanya ada dua langkah tambahan untuk RDBMS'es dasar-dasar SQL. Itulah mengapa tidak ada perbedaan.


31
2018-06-28 12:29



Secara umum, MySQL dan MongoDB sangat mirip dalam kinerja penulisan "tahan lama" pada satu mesin. Pencarian kunci / nilai yang sederhana hampir sama ... jika Anda ingin menggunakan MySQL seperti itu. Dukungan dokumen jelas merupakan manfaat produktivitas besar dan kemenangan besar untuk kinerja.

Dengan sharding otomatis ... MongoDB lebih cepat dalam cara yang tak terlukiskan. Di luar kotak, dengan desain yang tepat, Anda dapat skala hampir secara linier tanpa membangun logika apa pun ke dalam kode Anda sama sekali.

Pembagian baca / tulis juga dibangun di hampir setiap driver ... yang, sebagian besar, disponsori atau dikembangkan oleh 10gen itu sendiri.

Saya telah menskalakan aplikasi sebelumnya dan menulis kode pemecahan / pembagian, hash yang didistribusikan untuk sharding, menyeimbangkan pekerjaan yang berjalan terus-menerus, dan menambahkan gzip ke toko "dokumen" mysql. ugh.

Lebih cepat karena itu sederhana dan terfokus. Ini dirancang dengan semua ini dalam pikiran. Skala pada perangkat keras komoditas adalah prioritas. Prioritas RDBMS sangat berbeda.


6
2018-03-06 09:18



secara default, mongo tidak melakukan pengindeksan; juga tidak ada transaksi. namun, jika Anda mengonfigurasi tabel mysql tidak diindeks, dan mengaktifkan autocommit, Anda tidak akan melihat perbedaan kecepatan yang besar. menulis bit ke disk hanya membutuhkan waktu tertentu.

Namun, mongo dirancang untuk skala mudah. menggunakan pecahan, Anda dapat secara horizontal mengukur tulisan Anda dan mendapatkan kinerja yang jauh lebih baik tanpa kerumitan replikasi master-master. menggunakan set replika, Anda dapat mengatur skala bacaan Anda secara horizontal. jadi, saya akan mengatakan bahwa ada peningkatan kinerja sistemik, tetapi setiap kueri tidak selalu lebih cepat.


4
2018-06-28 12:33