OrientDB - Penyesuaian Performa
Di bab ini, Anda bisa mendapatkan beberapa tip umum tentang cara mengoptimalkan aplikasi Anda yang menggunakan OrientDB. Ada tiga cara untuk meningkatkan kinerja untuk tipe database yang berbeda.
Document Database Performance Tuning - Menggunakan teknik yang membantu menghindari pembuatan dokumen untuk setiap dokumen baru.
Object Database Performance Tuning - Menggunakan teknik umum untuk meningkatkan kinerja.
Distributed Configuration Tuning - Menggunakan metodologi yang berbeda untuk meningkatkan kinerja dalam konfigurasi terdistribusi.
Anda dapat mencapai penyetelan kinerja generik dengan mengubah pengaturan Memori, JVM, dan sambungan jarak jauh.
Pengaturan Memori
Ada berbagai strategi dalam pengaturan memori untuk meningkatkan kinerja.
Server dan Pengaturan Tertanam
Pengaturan ini berlaku untuk komponen Server dan JVM di mana aplikasi Java dijalankan menggunakan OrientDB dalam mode Tertanam, dengan langsung menggunakan plocal.
Hal terpenting dalam penyetelan adalah memastikan pengaturan memori sudah benar. Apa yang dapat membuat perbedaan nyata adalah keseimbangan yang tepat antara heap dan memori virtual yang digunakan oleh Pemetaan Memori, terutama pada set data besar (GB, TB, dan lainnya) di mana struktur cache memori lebih sedikit daripada IO mentah.
Misalnya, jika Anda dapat menetapkan maksimum 8GB ke proses Java, biasanya lebih baik menetapkan heap kecil dan buffer cache disk yang besar (memori off-heap).
Coba perintah berikut untuk menambah memori heap.
java -Xmx800m -Dstorage.diskCache.bufferSize=7200 ...
Itu storage.diskCache.bufferSize pengaturan (dengan penyimpanan "lokal" yang lama file.mmap.maxMemory) dalam MB dan memberi tahu berapa banyak memori yang digunakan untuk komponen Disk Cache. Secara default adalah 4GB.
NOTE - Jika jumlah maksimum heap dan buffer cache disk terlalu tinggi, ini dapat menyebabkan OS bertukar dengan sangat lambat.
Pengaturan JVM
Pengaturan JVM dikodekan dalam file batch server.sh (dan server.bat). Anda dapat mengubahnya untuk menyetel JVM sesuai dengan penggunaan dan pengaturan hw / sw Anda. Tambahkan baris berikut di file server.bat.
-server -XX:+PerfDisableSharedMem
Pengaturan ini akan menonaktifkan penulisan informasi debug tentang JVM. Jika Anda perlu membuat profil JVM, hapus saja pengaturan ini.
Koneksi Jarak Jauh
Ada banyak cara untuk meningkatkan kinerja saat Anda mengakses database menggunakan koneksi jarak jauh.
Strategi Pengambilan
Saat Anda bekerja dengan database jarak jauh, Anda harus memperhatikan strategi pengambilan yang digunakan. Secara default, klien OrientDB hanya memuat rekaman yang terdapat dalam kumpulan hasil. Misalnya, jika kueri mengembalikan 100 elemen, tetapi jika Anda menyilangkan elemen ini dari klien, maka klien OrientDB dengan malas memuat elemen dengan satu lagi panggilan jaringan ke server untuk setiap rekaman yang terlewat.
Pool Koneksi Jaringan
Setiap klien, secara default, hanya menggunakan satu koneksi jaringan untuk berbicara dengan server. Beberapa utas di klien yang sama berbagi kumpulan koneksi jaringan yang sama.
Jika Anda memiliki banyak utas, mungkin ada kemacetan karena banyak waktu dihabiskan untuk menunggu koneksi jaringan gratis. Inilah alasan mengapa penting untuk mengkonfigurasi pool koneksi jaringan.
Konfigurasinya sangat sederhana, hanya 2 parameter -
minPool- Ini adalah ukuran awal dari kumpulan koneksi. Nilai default dikonfigurasi sebagai parameter global "client.channel.minPool".
maxPool- Ini adalah ukuran maksimum yang dapat dicapai oleh kumpulan koneksi. Nilai default dikonfigurasi sebagai parameter global "client.channel.maxPool".
Jika semua koneksi pool sibuk, thread klien akan menunggu koneksi gratis pertama.
Contoh perintah konfigurasi dengan menggunakan properti database.
database = new ODatabaseDocumentTx("remote:localhost/demo");
database.setProperty("minPool", 2);
database.setProperty("maxPool", 5);
database.open("admin", "admin");
Pengaturan Konfigurasi Terdistribusi
Ada banyak cara untuk meningkatkan kinerja pada konfigurasi terdistribusi.
Gunakan Transaksi
Bahkan saat Anda memperbarui grafik, Anda harus selalu bekerja dalam transaksi. OrientDB memungkinkan Anda untuk bekerja di luarnya. Kasus umum adalah kueri hanya-baca atau operasi besar dan tidak bersamaan dapat dipulihkan jika terjadi kegagalan. Saat Anda menjalankan konfigurasi terdistribusi, menggunakan transaksi membantu mengurangi latensi. Ini karena operasi terdistribusi hanya terjadi pada waktu komit. Mendistribusikan satu operasi besar jauh lebih efisien daripada mentransfer beberapa operasi kecil, karena latensi.
Replikasi vs Sharding
Konfigurasi terdistribusi OrientDB diatur ke replikasi penuh. Memiliki banyak node dengan salinan database yang sama penting untuk pembacaan skala. Faktanya, setiap server independen dalam menjalankan pembacaan dan kueri. Jika Anda memiliki 10 node server, throughput baca adalah 10x.
Dengan menulis, sebaliknya: memiliki banyak node dengan replikasi penuh memperlambat operasi, jika replikasi sinkron. Dalam kasus ini, sharding database di beberapa node memungkinkan Anda meningkatkan skala penulisan, karena hanya subset node yang terlibat pada penulisan. Selain itu, Anda dapat memiliki database yang lebih besar dari satu node server HD.
Meningkatkan skala Penulisan
Jika Anda memiliki jaringan yang lambat dan memiliki replikasi sinkronis (default), Anda dapat membayar biaya latensi. Faktanya ketika OrientDB berjalan serentak, itu menunggu setidaknya untuk filewriteQuorum. Ini berarti jika writeQuorum adalah 3, dan Anda memiliki 5 node, node server koordinator (tempat operasi terdistribusi dimulai) harus menunggu jawaban dari setidaknya 3 node untuk memberikan jawaban kepada klien.
Untuk menjaga konsistensi, writeQuorum harus disetel ke mayoritas. Jika Anda memiliki 5 node, mayoritas adalah 3. Dengan 4 node, itu masih 3. Menyetel writeQuorum ke 3 daripada 4 atau 5 memungkinkan untuk mengurangi biaya latensi dan tetap menjaga konsistensi.
Replikasi Asinkron
Untuk mempercepat, Anda dapat mengatur Replikasi Asinkron untuk menghilangkan hambatan latensi. Dalam kasus ini, node server koordinator menjalankan operasi secara lokal dan memberikan jawaban kepada klien. Seluruh replikasi akan berada di latar belakang. Jika kuorum tidak tercapai, perubahan akan dibatalkan secara transparan.
Meningkatkan Skala Baca
Jika Anda sudah menyetel writeQuorum ke sebagian besar node, Anda dapat meninggalkan file readQuorumke 1 (default). Ini mempercepat semua pembacaan.