ARTIKEL-
Mengenal Neo4J
Posting kali ini dalam bahasa Indonesia lagi karena memang sebelum posting terakhir, cukup lama saya tidak menampilkan pospting dalam bahasa Indonesia. Selain itu pembaca dari Indonesia masih menjadi mayoritas di blog saya ini.
Sebelumnya ada berita yang cukup menggembirakan buat saya yaitu blog yang ala kadarnya ini bisa masuk peringkat 2 juta web site di dunia. Memang masih cukup jauh untuk jadi populer hanya saja ini melebihi ekspektasi saya yang awalnya membuat blog ini hanya sebagai catatan saya supaya nanti kalau saya lupa bisa saya cari dan baca lagi dengan mudah dan murah.
Posting kali ini mengenai sebuah basis data graph yang bernama Neo4J. Neo4J merupakan basis data graph yang paling awal dan paling mature diantara basis data lainnya. Neo4J dimulai pada awal tahun 2000-an dan telah dipakai oleh banyak perusahaan besar seperti misalnya eBay.
Neo4J seperti database graph lainnya bisa digunakan, baca: mempermudah, penyimpanan dan pengambilan data dalam bentuk graph. Misalnya adalah media sosial, sistem rekomendasi, fraud detection dsb-nya.
Pada Neo4J data direpresentasikan dalam bentuk Node dan Edge. Node meupakan titik edge adalah penghubung antar dua Node. Baik Node dan Edge memiliki atribut yang bisa kita sesuaikan. Sebelum menciptakan Node atau Edge, bisa kita definisikan atribut yang ada di tiap Node atau Edge tersebut. Hal ini opsional tidak wajib tapi merupakan best practice untuk dilakukan.
Perancangan database di Neo4J hanya sebatas desain Node dan Edge. TIdak ada lah istilah tabel atau database dalam Neo4J. Hal ini berbeda dengan basisdata RDBMA atau NoSQL lainnya. Pada basis data lain kita harus menciptakan database dulu lalu kita menciptakan tabel di dalam database tersebut. Pada sistem RDBMS atau NoSQL lainnya, bisa ada beberapa database dalam satu database server, misal database penjualan, database barang dan sebagainya. Sedangkan dalam tiap database terdapat tabel-tabel yang menyimpan data.
Untuk Neo4J, dalam satu database server Neo4J hanya ada satu database, kita tidak perlumendefinisikan nama databasenya, juga tidak ada tabel didalam database tersebut. Sehingga ketika kita ingin mengubah database maka seluruh file di direktori data di Neo4J harus dihapus secara manual. Cara ini yang paling cepat dibanding menghapus Node dan Edge.
Selain memiliki kemampuan menyimpan data dalam bentuk Node dan Edge, Neo4J juga memiliki bahasa query sendiri yang diberi nama Cypher. Cypher disini ada kemiripan dengan Gremlin. Bahkan dikatakan bahwa Neo4J termasuk yang duku pertama kali mempopulerkan Gremlin. Akan tetapi sekarang, Neo4J mulai meninggalkan Gremlin dan beralih ke Cypher.
Cypher menyediakan banyak cara untuk mengambil data dari Neo4J. Cara-cara tersebut antara lain untuk mendapatkan shortest path, simple paths, recommendation, dsb-nya.
Bagi yang membaca posting saya sebelumnya tentang library pemrosesan graph seperti NetworkX, Spark GraphX, Flink Gelly, dsb-nya. Mungkin bertanya-tanya apa perbedaan library-library tersebut dengan graph database seperti Neo4J. Karena Neo4J sendiri dan juga bahasa lain memiliki bahasa query untuk mengambil dan mengolah data.
Mengenai persamaannya kita sudah sama-sama tahu. Keduanya bisa digunakan untuk mengambil data dari graph dan mengolah data graph. Perbedaanya untuk library-library tersebut dalam menjalankan fungsinya untuk mengolah graph maka data node dan edge harus di ambil dan dimasukkan ke memori. Seingkali proses loading ini harus dilakukan dengan kita membuat kode sendiri membaca dari data storage atau database. Baru kemudian library-library tersebut bisa menjalankan fungsinya.
Sedangkan untuk database graph seperti Neo4J, kita hanya membuat querynya, e.g. dengan cypher, maka Neo4J yang memprosesnya. Aplikasi kita tinggal menunggu hasilnya.Hal ini mempermudah dalam pembangunan aplikasi karena kompleksitas pengolahan dan pengambilan data dari graph di handle oleh Nepo4J atau database graph.
Meskipun rasanya database graph memiliki banyak manfaat, tetapi library-library graph ini masih diperlukan terutama oleh data scientist untuk menemukan pola baru. Selain itu juga digunakan untuk pengolah graph yang kompleks dengan algoritma machine learning. Kebanyakan library graph ini digunakan secara periodik/batch dan tidak secara realtime/langsung terus menerus.