ORIENTDB - introduction


Nicky Irawan
PT. Akhdani Reka Solusi
nicky@akhdani.co.id

SIAPA SAYA?


Nicky Irawan
Alumni Teknik Informatika
Institut Teknologi Bandung
PT. Akhdani Reka Solusi
Software Engineer


This is just my humble knowledge and opinion 
for my desire to learn and share
for a better future

PENGALAMAN DENGAN NOSQL


Proyek
Medical Record (Medrec) Yakes Telkom
menggunakan CouchDB

NoSQL yang dioprek
MongoDB, Redis, CouchBase, OrientDB

Next
Apache Hadoop, Elastic Search, Neo4J, dll

ISI dan tujuan SLIDE


Mengenal apa itu OrientDB
Mengatur OrientDB untuk database terdistribusi
Menggunakan OrientDB untuk aplikasi terdistribusi




"Choose the right tools for the right problems"
Anonymous

orientdb


OrientDB adalah Open Source database NoSQL dengan gabungan antara NoSQL jenis Document dan juga Graph, dikembangkan oleh perusahaan bernama Orientechnologies, ditulis dengan Java, dan dikabarkan sangat cepat sehingga dapat menyimpan hingga 150rb data per detik pada hardware biasa.


pengenalan


Bagi yang ingin mengetahui apa itu NoSQL, NoSQL Document, NoSQL Graph, silahkan baca slide lain

Sedikit review, keunggulan NoSQL Document paling terasa adalah kemudahan menyimpan data tanpa harus mendefinisikan kolom seperti pada tabel RDBMS

Keunggulan NoSQL Graph paling terasa adalah kemudahan untuk menyimpan dan mengetahui relasi antar data, dimana tidak seperti relasi antar tabel pada RDBMS

fitur orientdb


Beberapa fitur utama dari OrientDB yang menarik perhatian
  • Gabungan Document dan Graph
  • Standalone dan Distributed
  • SQL Like support
  • Transactional ACID
  • Cepat (klaim dari Orientechnologies)
  • Web interface (untuk kemudahan bagi yang tidak familiar)

instalasi


Proses instalasi OrientDB cukup mudah, dapat dilihat pada petunjuk yang tersedia di websitenya.

Untuk OS Windows, unduh zipnya, ekstrak, lalu jalankan servernya, untuk mengakses, kita bisa menggunakan console yang juga disediakan, mirip dengan console MySQL.

OrientDB memerlukan Java untuk menjalankan, jangan lupa untuk mengunduh JDK. Yang digunakan pada tutorial ini adalah OrientDB versi 1.7.7

running


Ada 2 file yang utama untuk menjalankan OrientDB Server
  • server.bat atau server.sh
  • dserver.bat atau dserver.sh


Perbedaan utamanya adalah server(.bat/.sh) digunakan untuk menjalankan server yang sifatnya standalone, tidak perlu berkomunikasi dengan OrientDB lain, sedangkan dserver (.bat/.sh) untuk server OrientDB terdistribusi yang dapat saling berkomunikasi

STANDALONE ORIENTDB


Untuk menjalankan OrientDB standalone, cukup mudah, konfigurasi (XML) yang harus diperhatikan hanya terletak di config/orientdb-server-config.xml


Ada 2 hal terkait konfigurasi yang harus diperhatikan
  • Security terkait user untuk akses
  • Port yang digunakan untuk listener (binary dan http)

Konfigurasi user


Konfigurasi user terletak pada bagian <users> ...</users>
User ini adalah user yang digunakan untuk database sysadmin

OrientDB mengenal 2 jenis user, user untuk mengakses ke server (db sysadmin), dan user untuk mengakses ke database (tiap-tiap database)

Saat server dijalankan pertamakali, isi <users></users> yang sebelumnya kosong, akan diset dengan default root dan guest, silahkan tambah user misalnya dbadmin dan password dbadmin


konfigurasi port


Ada port yang digunakan oleh OrientDB sebagai listener 
(binary dan http) sebagai akses dari luar ke database

Defaultnya, untuk listener binary, 
digunakan port 2424 - 2430,
Sedangkan untuk listener http port 2480 - 2490

Untuk sementara kita biarkan default, jika sudah paham bisa dicoba untuk diubah sendiri, jalankan server, lalu jalan console

Tampilan server


tampilan console


Untuk masuk ke dalam database, coba ketikkan perintah
connect plocal:../database/GracefulDeadConcerts dbadmin dbadmin

Tampilan STUDIO


OrientDB memiliki plugin berupa Studio, yaitu web interface untuk mengakses ke dalam server, coba buka http://localhost:2480

selamat mencoba


Silahkan mencoba-coba dengan console dan demo database yang ada, untuk lebih lanjut, coba familiar dengan tutorial

Jangan lupa untuk mencoba SQL Like command yang dapat digunakan untuk mengakses database layaknya RDBMS

distributed orientdb


Salah satu fitur yang menarik perhatian adalah bagaimana OrientDB dapat digunakan untuk distributed database

OrientDB mendukung replikasi dengan metode Master-to-Master dimana seluruh instance database dapat diakses (r+w), dan automatic sync ketika salah satu instance terputus lalu tersambung lagi

Konfigurasi yang harus diperhatikan
config/hazelcast.xml, config/orientdb-dserver-config.xml dan config/default-distributed-db-config.json

KOnfigurasi


config/orientdb-dserver-config.xml
mirip dengan konfig pada standalone plus tambahan konfig lainnya

config/hazelcast.xml
konfigurasi untuk komunikasi antar server

config/default-distributed-db-config.json
konfigurasi default yang digunakan untuk database yang terdistribusi

konfigurasi dserver


config/orientdb-dserver-config.xml
yang harus diperhatikan

parameter nodeName untuk nama dari server, contoh
<parameter value="server1" name="nodeName"/>

parameter enabled untuk menyalakan
<parameter value="true" name="enabled"/>

port untuk listener binary dan http

konfigurasi hazelcast


config/hazelcast.xml
yang harus diperhatikan

Group, user dan password cluster (kumpulan server)
<group><name>...</name><password>...</password></group>

Port yang digunakan untuk komunikasi
<port auto-increment="false">2434</port>

Metode bergabung ke dalam cluster (multicast/tcp-ip)
<join><multicast>...</multicast><tcp-ip>...</tcp-ip></join>

konfigurasi distributed db


config/default-distributed-db-config.json
yang harus diperhatikan

Quorum untuk read dan write, berapa banyak server yang harus menerima perintah sebelum dinyatakan perintah valid
"readQuorum" dan "writeQuorum"

Server yang boleh tergabung, statis atau dinamis
"servers" : ["<NEW_NODE>"]
 

Contoh implementasi dserver


Kita akan melakukan percobaan membuat 2 buah OrientDB server, dalam 1 mesin, hanya saja berbeda port, dengan nama group orient_test dan password orient_test

Node1
port Hazelcast 2424, port Binary 2425, port HTTP 2426

Node2
port Hazelcast 2434, port Binary 2435, port HTTP 2436

Config/hazelcast.xml

Node 1
 <group>
		<name>orient_test</name>
		<password>orient_test</password>
</group>
<network>
		<port auto-increment="false">2424</port>
		<join>
			<tcp-ip enabled="true">
				<member>localhost:2434</member>
			</tcp-ip>
		</join>
</network>

Node 2
Perbedaan pada port diset ke 2434 dan member ke localhost:2424

Config/orientdb-dserver-config.xml

Node 1

 <parameter value="node1" name="nodeName"/>

 <listener protocol="binary" socket="default" port-range="2425" ip-address="0.0.0.0"/>
 <listener protocol="http" socket="default" port-range="2426" ip-address="0.0.0.0">

Node 2
Sesuaikan nodeName dan port untuk listener

Selamat mencoba


Jalankan Node 1, lalu jalankan Node 2, 
silahkan bereksperimen mulai dari 
menambah/mengurangi class dalam database demo (GracefulDeadConcerts), hingga menambah atau mengurangi database

Bisa juga dengan database pada Node 2 kosong, lalu ketika terhubung ke cluster, maka Node 2 akan menerima database seperti pada database di Node 1

Jangan lupa untuk mencoba server pada mesin yang berbeda!

percobaan lanjutan


Berikut beberapa ide yang sempat terpikir dan sudah dicoba sedikit

Bagaimana jika kita membuat 
aplikasi desktop dengan teknologi web 
(HTML 5, JS, NodeJS, Node-webkit)
dan databasenya OrientDB (distributed)

lalu aplikasi didistribusikan di beberapa komputer, 
dan saling terhubung

Orientdb, nodejs, node-webkit


Ketika aplikasi dijalankan, dengan menggunakan NodeJS kita menyalakan database OrientDB juga (memanggil .bat)

var exec            = require('child_process').exec,
    os              = require('os'),
    path            = require('path'),
    fs              = require('fs');

dir  = path.dirname(process.execPath);

var env = {};
env['ORIENTDB_HOME'] = dir + '\\db';
for(var i in process.env) if(process.env.hasOwnProperty(i)){
    env[i] = process.env[i];
}

exec(dir + '\\db\\bin\\dserver.bat', {env: env, cwd:dir}, function(error, stdout, stderr){});

orientdb, nodejs, node-webkit


Yang harus diperhatikan adalah 
bahwa untuk menjalankan OrientDB, harus diset terlebih dahulu ORIENTDB_HOME, lokasi dari OrientDB,
serta konfigurasi pada environment path, 
seperti JAVA_HOME

Progress sejauh ini


  • Aplikasi standalone dengan OrientDB
  • Aplikasi distributed dengan OrientDB


Untuk aplikasi terdistribusi, database baik dalam 1 mesin maupun berbeda mesin, serta server pusat dapat terhubung satu sama lain, baik ketika tiba-tiba salah satu klien terputus, dan tersambung beberapa saat kemudian

Percobaan berhasil dilakukan!
Tinggal menunggu implementasi pada real-world apps


SEKIAN


Demikian review, opini, dan ide tentang OrientDB dan contoh tutorial bagaimana melakukan konfigurasinya

Tunggu tanggal tayang saat dicoba untuk proyek pribadi 
yang menggunakan OrientDB :)

*lanjut ngoprek lagi*
Made with Slides.com