MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana Membandingkan MongoDB dengan YCSB?

Saat berbicara tentang karakteristik kinerja sistem, sebagian besar penyedia DBaaS membatasi diri untuk memberikan informasi tentang perangkat keras tempat sistem mereka disediakan. Memang sulit untuk berbicara secara akurat tentang karakteristik throughput/latency aktual dari penyebaran berbasis cloud mengingat jumlah variabel dalam sistem seperti itu. Lingkungan virtual, beban kerja yang tidak dapat diprediksi, latensi jaringan, geografi yang berbeda hanyalah beberapa pertimbangan.

Namun, merupakan ide yang baik untuk memiliki pemahaman yang adil tentang kinerja sebenarnya dari penerapan MongoDB Anda:sehingga Anda dapat menyediakan secara akurat berdasarkan kebutuhan aplikasi Anda; sehingga Anda benar-benar dapat membandingkan berbagai penyedia DBaaS untuk memastikan bahwa Anda mendapatkan yang terbaik "bang for the buck".

Blog ini adalah panduan utama dalam menjalankan beberapa tolok ukur kinerja dasar di klaster MongoDB Anda. Ini masuk ke detail tentang cara mengonfigurasi dan menjalankan tes benchmark YCSB dan menginterpretasikan hasilnya. Inspirasinya datang dari blog MongoDB baru-baru ini tentang peningkatan kinerja di MongoDB 3.0.

YCSB adalah paket program dan spesifikasi open-source Java yang populer yang dikembangkan di Yahoo! untuk membandingkan kinerja relatif dari berbagai database NoSQL. Beban kerjanya digunakan dalam berbagai studi perbandingan database NoSQL.

Menyiapkan YCSB

Bagian ini dan selanjutnya akan memandu Anda melalui proses langkah demi langkah untuk menyiapkan, mengonfigurasi, dan menjalankan pengujian YCSB pada sistem penyedia DBaaS favorit Anda.

Untuk menjalankan pengujian beban kerja, Anda memerlukan mesin klien, sebaiknya di lokasi geografis yang sama dengan cluster MongoDB Anda untuk menghindari latensi Internet. Pilih konfigurasi yang memiliki jumlah jus yang layak untuk menjalankan banyak utas untuk memuat cluster Mongo Anda dengan tepat. Mesin perlu menginstal Java, Maven, dan git versi terbaru.

Langkah-langkah:

  • Jika Java, Maven, atau git belum terinstal di sistem Anda, instal. Lihat dokumentasi yang tersedia untuk OS spesifik Anda. Pastikan Anda menginstal versi Maven yang kompatibel dengan versi Java Anda. Uji apakah semua dependensi berfungsi dengan benar. Untuk mis.
$ javac -version
javac 1.8.0_25
$ mvn -version
Apache Maven 3.3.1 (cab6659f9874fa96462afef40fcf6bc033d58c1c; 2015-03-14T01:40:27+05:30)
Maven home: /usr/local/Cellar/maven/3.3.1/libexec
Java version: 1.8.0_25, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.10.2", arch: "x86_64", family: "mac"
$ git --version
git version 1.9.5 (Apple Git-50.3)
  • Seperti yang disarankan oleh halaman Github YCSB, Anda bisa mendapatkan arsip tar YCSB. Tetapi kami menyarankan untuk membuatnya dari sumber. Langkah-langkah didokumentasikan dalam README MongoDB dari YCSB. Ini akan membantu kami mengaktifkan autentikasi MongoDB untuk penyedia cloud Anda nanti.
git clone git://github.com/brianfrankcooper/YCSB.git
cd YCSB
mvn clean package
  • Catatan:Jika `mvn clean package` Anda atau `mvn clean install` perintah gagal karena kesalahan dalam menemukan paket "mapkeeper", menghapus atau mengomentari 2 contoh entri "mapkeeper" di pom.xml di tingkat akar. Lihat masalah Github ini untuk informasi lebih lanjut.
  • Setelah pembangunan berhasil, Anda sekarang siap untuk menjalankan pengujian YCSB!

Mengaktifkan Otentikasi

Sebagian besar penyedia MongoDB menyediakan autentikasi MongoDB secara default dan tidak ada cara untuk menonaktifkannya. Sayangnya, YCSB saat ini tidak mendukung otentikasi MongoDB. Implementasi klien itu sendiri menggunakan sebagian besar, sekarang, panggilan API yang tidak digunakan lagi. Untuk memenuhi kebutuhan kami, kami menambahkan properti YCSB khusus MongoDB baru, 'mongodb.auth' bersama dengan beberapa baris kode untuk mendukungnya. Perubahannya sangat sederhana dan perbedaan dapat ditemukan di sini. Properti YCSB spesifik MongoDB default tercantum di sini.

Buat kembali paket menggunakan mvn lagi setelah perubahan selesai. Lihat bagian di atas tentang cara membangun YCSB menggunakan Maven.

Menjalankan Tes

Bagian wiki YCSB ini mencantumkan aktivitas selanjutnya dan selanjutnya secara rinci. Kami akan menjelaskannya di sini secara singkat bersama dengan petunjuk lainnya.

  • Langkah selanjutnya adalah memilih jenis beban kerja yang ingin Anda jalankan. Luangkan waktu untuk membaca dan memahami bagian Beban Kerja Inti dari wiki YCSB. Mereka dirangkum di sini:
    • Beban Kerja A:Perbarui beban kerja berat:50/50% Campuran Baca/Tulis
    • Beban Kerja B:Sebagian besar beban kerja membaca:95/5% Campuran Bacaan/Tulis
    • Beban Kerja C:Hanya baca:100% dibaca
    • Beban Kerja D:Baca beban kerja terbaru:Lebih banyak lalu lintas pada sisipan terbaru
    • Beban Kerja E:Rentang pendek:Kueri berbasis rentang pendek
    • Beban Kerja F:Baca-modifikasi-tulis:Baca, ubah, dan perbarui catatan yang ada
  • Jelas, beban kerja individu dapat diubah menggunakan Properti Inti. Anda mungkin ingin memilih beban kerja dan mengubah properti agar sesuai dengan sesuatu yang cocok dengan karakteristik aplikasi Anda. (Studi komparatif ini memilih banyak beban kerja yang “diubah” yang menarik). Juga, lihat blog MongoDB yang kami sebutkan di bagian pertama. (Pengujian kami akan mengambil Beban Kerja A dengan rasio baca/perbarui default).
  • Pilih jumlah operasi (Properti 'penghitungan operasi') sehingga pengujian itu sendiri akan berjalan selama jangka waktu yang sesuai. Pengujian yang selesai dalam waktu 30 menit tidak dapat menjadi indikator yang baik untuk kinerja sistem secara umum.
  • Pilih jumlah utas yang sesuai yang harus dijalankan YCSB. Ini benar-benar tergantung pada seberapa bagus mesin klien Anda, seberapa banyak beban yang dapat diambil oleh cluster MongoDB Anda dan seberapa representatifnya aplikasi Anda yang sebenarnya. Kami akan menjalankan pengujian tolok ukur kami terhadap berbagai rangkaian pesan.
  • Jalankan fase pemuatan. Pilih jumlah record (Properti 'recordcount') untuk dimasukkan ke dalam database yang mendekati jumlah operasi yang ingin Anda jalankan di dalamnya. Pilih jumlah utas yang sesuai agar penyisipan tidak terlalu lama. Misalnya
    ./bin/ycsb load mongodb -s -P workloads/workloada -p recordcount=10000000 -threads 16 -p
     mongodb.url="mongodb://user:[email protected]:9999,server2.example.com:9999/dbname" -p 
    mongodb.auth="true"
    
    • load ' bendera menunjukkan bahwa ini adalah proses pemuatan.
    • s ' bendera mencetak status pada interval 10 detik
    • recordcount ' disetel ke 10 juta.
    • threads ‘ menyetel jumlah utas klien menjadi 16.
    • mongodb.auth ' adalah properti yang kami tulis untuk mengaktifkan otentikasi MongoDB.
  • Ingat untuk
    • Arahkan stdout ke file.
    • Gunakan ‘screen ' atau metode yang setara sehingga sesi Anda tidak hilang saat menjalankan operasi ini
  • Setelah fase pemuatan data selesai, Anda siap menjalankan beban kerja. Untuk mis.
./bin/ycsb run mongodb -s -P workloads/workloada -p 
mongodb.url="mongodb://user:[email protected]:9999,server2.example.com:9999/dbname" -p
 mongodb.auth="true" -p operationcount=10000000 -threads 2
  • Ulangi proses dengan berbagai jumlah utas. Ingatlah untuk mengarahkan ulang hasil sehingga Anda dapat membandingkannya nanti. Untuk misalnya kami mengulangi pengujian kami untuk 2, 4, 8, 16 &32 utas.

Menganalisis Hasil

Bagian terakhir dari halaman wiki YCSB ini membahas tentang menganalisis hasil. Informasi yang paling menarik adalah Throughput Keseluruhan dan Latensi Persentil 95/99%. Biasanya meningkatkan jumlah utas meningkatkan throughput sampai saat keuntungan rata dan latensi menjadi tidak dapat diterima. Untuk misalnya inilah plot Throughput dan Latensi versus # utas untuk sistem pengujian yang kami coba tolok ukur. Beban kerja yang dipilih adalah Beban Kerja A dan sekitar 3 juta operasi.

Dapat disimpulkan dari grafik bahwa 16 utas mungkin merupakan "titik manis" dari sudut pandang beban untuk server MongoDB ini:Di ​​luar itu, garis throughput datar bahkan untuk pertumbuhan eksponensial di # utas sementara latensi tumbuh menjadi sangat besar.

Beberapa petunjuk:

  • Untuk gambaran yang lebih baik tentang kinerja sistem melalui cloud, otomatisasi dan ulangi pengujian ini di berbagai titik hari ini. Kami telah memperhatikan bahwa karakteristik kinerja dapat bervariasi secara signifikan sepanjang hari.
  • Saat membandingkan dua calon penyedia DBaaS, pastikan Anda memilih mesin klien dan cluster DBaaS dalam geografi yang sama. Cluster harus memiliki konfigurasi yang sama. Juga, ingatlah untuk menjalankan tes pada waktu yang berbeda dalam sehari.

Apa Selanjutnya

Berikut adalah beberapa hal yang ingin kami selidiki saat kami melakukan lebih banyak pekerjaan di bidang ini:

  • Menjalankan beban kerja dari beberapa mesin secara paralel:Saat mencoba memuat klaster MongoDB berkapasitas tinggi, satu mesin klien tidak akan cukup. YCSB saat ini tidak menyediakan cara mudah untuk menjalankan beban kerja dari beberapa mesin secara paralel. Namun, itu bisa dilakukan secara manual. Ini juga akan berguna saat mencoba memuat data ke dalam cluster besar.
  • Ukuran Dataset:Ukuran database versus memori sistem MongoDB akan mengubah karakteristik throughput/latency absolut mengingat bahwa untuk kumpulan data yang lebih besar MongoDB harus menekan disk .
  • Ukuran masing-masing record:Karakteristik performa akan menarik jika ukuran record besar, terutama saat mendekati ukuran record maksimum yang didukung. Ini mungkin penting untuk aplikasi yang sebagian besar melakukan operasi baca-modifikasi-tulis ulang (seperti Beban Kerja F).
  • Driver MongoDB alternatif:Karena saat ini kami tertarik untuk membandingkan dua penyedia DBaaS yang berbeda, kami tidak mencoba menggunakan driver database yang lebih efisien. Jelas, angka absolut yang jauh lebih baik dapat dicapai dengan driver terbaru dan lebih efisien. Ini akan menarik untuk aplikasi yang mencoba mengekstrak jus terakhir dari sistem mereka. Blog ini membahas tentang pengukuran peningkatan kinerja melalui YCSB dengan menggunakan driver MongoDB asinkron.
  • Alat Pembandingan Alternatif:Sysbench untuk MongoDB adalah salah satu yang menurut kami menarik. Kami melihat yang lain.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Agregasi MongoDB dengan $lookup hanya menyertakan (atau memproyeksikan) beberapa bidang untuk dikembalikan dari kueri

  2. Menghubungkan ke mongodb melalui browser?

  3. Meteor - collection.find() selalu mengembalikan semua bidang

  4. Kelompokkan menurut jumlah mongodb

  5. Bagaimana cara menerapkan batasan di MongoDB?