1.1 Pendahuluan
Penetrasi internet yang kini telah digunakan oleh lebih dari 171,7 juta pengguna di Indonesia
(APJII, 2019) telah memberikan banyak manfaat di berbagai bidang, salah satu diantaranya
adalah pada sektor bisnis online atau e-commerce. Hal ini dibuktikan dengan potensi bisnis
online dengan nilai penjualan global e-commerce tahun 2018 yang hampir mencapai 77,766
triliun rupiah atau tumbuh sebesar 151% dibandingkan tahun 2017 menurut Data Bank
Indonesia 2019.
Tingginya potensi dan peluang yang menjanjikan dari bisnis online yang di Indonesia,
pemanfaatan open source ecommerce berbasis CMS (Content Management System) yang
tersebar luas di internet menjadi andalan para pelaku bisnis dalam meningkatkan penjualan dan
pelayanannya kepada pelanggan. Adanya web e-commerce diharapkan dapat memudahkan
pelanggan saat berbelanja. Tidak hanya itu untuk membuat pelanggan tetap loyal, diperlukan
layanan ecommerce yang mampu memperlakukan setiap pelanggannya secara spesial, salah
satunya adalah sistem rekomendasi. Sistem rekomendasi memberikan usulan produk yang
terkustomisasi sesuai ketertarikan setiap pelanggan secara unik. Namun, tidak semua platform
atau website penjualan pribadi yang digunakan menyediakan sistem rekomendasi sehingga
dapat membatasi layanan e-commerce yang digunakan. Setiap bisnis menggunakan platform
yang berbeda sesuai dengan kebutuhan dan memiliki alasannya masing-masing dalam
pemilihan platform yang sesuai dengan bisnis yang dijalankan (Safitri 2017).
Developer akan merasa kesulitan atau tidak efisien jika developer harus membuat sistem
rekomendasi satu per satu pada setiap platform yang berbeda. Belum lagi keterbatasan pada
implementasi berbasis relational database kurang efektif dalam merepresentasikan informasi
dan hubungan antara produk dan pelanggan dengan segara transaksi yang terjadi (Wibowo
2013). Oleh karena itu, diperlukan suatu sistem untuk mengelola data dalam jumlah yang
sangat besar dan juga fleksibel.
Sudah kurang lebih 20 tahun bahasa SQL digunakan oleh para developer. Dengan adanya
teknologi internet semua hal dapat berubah dengan cepat. Transaksi data setiap hari semakin
bertambah dan para developer merasakan adanya kekurangan pada bahasa SQL. Salah satunya
adalah saat data diminta SQL memerlukan memori yang besar, karena harus melihat pada tabel
– tabel yang ada pada database. Jika database kecil hal tersebut tidak masalah, namun jika
database besar itu akan mengurangi kinerja dari database. Dari latar belakang kondisi tersebut
banyak developer mulai mencari cara untuk mengatasinya, dan ditahun 2000 muncul sebuah
gerakan yang disebut “NoSQL Movement” yang diprakasai oleh Johan Oskarsson.
Pergerakkan ini menghasilkan sebuah mekanisme dimana untuk mengambil data tidak lagi
menggunakan bahasa SQL.
NoSQL bukan merupakan bahasa. NoSQL adalah sebuah mekanisme untuk menyimpan data
dan mengambil data yang dilakukan oleh database. NoQSL tidak membutuhkan data model
relational dan bahasa SQL untuk melakukan hal tersebut. NoSQL menggunakan metadata pada
database dan memanfaatkan index dari data tersebut. NoSQL mempunyai empat mekanisme:
• Table-oriented, contoh: Google dengan Big Table dan juga Facebook dengan
Cassandra,
• Graph-oriented,
• Document-oriented database, contoh: MongoDB dan juga CouchDB,
• Key-value store, contoh: Memcache dan Redis
Database No SQL merupakan database yang tidak memiliki perintah SQL dan konsep
penyimpanan yang semistruktural atau tidak terstruktur. No SQL juga bekerja tidak harus
memiliki relasi seperti layaknya table-tabel MySQL, Postgre SQL, atau Oracle database.
Database NoSQL digunakan dengan tujuan untuk memiliki skema yang fleksibel dalam
membuat aplikasi modern. Kebanyakan dalam beberapa kasus penggunaan database NoSQL
berfungsi dalam pengembangan aplikasi yang real time. NoSQL bekerja dengan menggunakan
berbagai model database untuk mengelola dan mengakses data, seperti dokumen, key-value,
grafik, in-memory dan search-engine. Salah satu model database untuk mengelola data-data
tidak terstruktur adalah model grafik. Database jenis grafik menggunakan node sebagai entitas
data dan edge sebagai hubungan antar entitas. Setiap edge memiliki node awalan dan node
akhir. Edge juga menggambarkan hubungan antara orangtua, anak, kepemilikan, tindakan, dan
lain sebagainya. Tujuan dari database jenis grafik ini adalah jaringan sosial media,
pengetahuan, dan mesin rekomendasi. Neo4j bekerja dengan fleksibel dan mudah dibanding
dengan pengolahan data dengan SQL. Dengan adanya layanan pengolahan data NoSQL ini,
diharapkan dapat memberikan kemudahan bagi setiap pengguna e-commerce untuk
mengetahui rekomendasi dari berbagai data transaksi yang berbeda dengan pemrosesan yang
lebih efisien melalui basis data grafik.
1.2 Pembahasan
1.2.1 Fitur Neo4j graph DBMS
Neo4J adalah sistem manajemen basis data graph yang dikembangkan oleh Neo4J, Inc., sebuah
perusahaan yang berbasis di San Francisco Bay Area, Amerika Serikat. Hasil perhitungan
peringkat DB-Engines menunjukkan Neo4J menempati peringkat pertama sistem basis data
graph paling populer mengalahkan Microsoft Azure Cosmos DB, ArangoDB, OrientDB, dan
beberapa sistem manajemen basis data graph lain. Neo4J menggunakan bahasa query bernama
Cypher. Cypher adalah sebuah bahasa deklaratif yang terinspirasi dari SQL untuk
mendeskripsikan pola graph. Cypher pada awalnya dikembangkan eksklusif untuk Neo4J tapi
kemudian dengan dirilisnya openCypher kini Cypher bisa diterapkan pada SAP Hana dan
AgensGraph. Cypher Query mendefinisikan node relationship dengan syntax CREATE dan
MATCH (Robbani dan Wibowo 2018).
Neo4J seperti database graph lainnya bisa digunakan, dalam 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 (Septiamsyah dan Heryandi 2013).
Pada Neo4J data direpresentasikan dalam bentuk Node dan Relasi. Node merupakan titik.
Relasi adalah penghubung antar dua node. Baik Node dan Relasi memiliki property yang bisa
kita sesuaikan. Sebelum menciptakan node atau Relasi, bisa kita definisikan atribut yang ada
di tiap node atau Relasi tersebut. Hal ini opsional tidak wajib tapi merupakan best practice
untuk dilakukan. Perancangan database di Neo4J hanya sebatas desain node dan relasi. Tidak
ada istilah tabel atau database dalam Neo4J. Hal ini berbeda dengan basis data RDBMS atau
NoSQL lainnya. Untuk Neo4J, dalam satu database server Neo4J hanya ada satu database, kita
tidak perlu mendefinisikan nama database, juga tidak ada table 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 relasi.
Neo4j telah dikembangakan sejak tahun 2003, dapat ditulis dengan Bahasa Java, JRuby, Scala,
Python, Clojure dan sebagainya (Neo4j Team, 2012). Karakteristik tipe data dari neo4j adalah:
1. Bersifat optional, tidak memiliki struktur data, mudah saat melakukan perubahan
skema.
2. Mudah untuk dimodelkan pada domain data sets yang umum seperti pada permodelan
CMS (Compact Motion Switch) sebagai access control list, database objek, Triple
stores dll.
3. Penggunaannya pada semantic web dan EDF (External Data Format), linkedData, GIS
(Geographic Information System), situs jejaring sosial dan lain sebagainya.
Bagian penting pembentuk graph database dalam Neo4j terdiri dari 6 bagian yaitu, Node,
Relationship, Properties, Path, Traversal dan Query (Ali et.al, 2012).
• Node adalah bagian yang paling mendasar yang membentuk sebuah graph.Dalam neo4j
node dapat memiliki relationship dan properti (Neo4j Team, 2012).
• Relationship merupakan salah satu kunci pembentuk graph database. Dengan adanya
relationship memungkinkan untuk mencari data atau informasi yang berkaitan. Seperti
halnya node, relationship juga dapat memiliki properti.
• Properti merupakan key pada setiap node yang umumnya adalah sebuah tipe data
string. Dan nilai atau isi properti pada setiap key yang bertipe string dapat mencakup
semua tipe data dan memungkinkan untuk fungsi array (Neo4j Team, 2012).
• Path merupakan node yang memiliki hubungan (relationship) disebut path. Misalnya
hubungan antara node 1 dengan node 2, biasanya path berasal dari pengambilan secara
query maupun hasil dari kunjungan traversal.
• Traversal memiliki arti mengunjungi setiap node, mengikuti setiap hubungan satu
node ke node yang lain yang tentu saja berdasarkan aturan yang ada. Dalam banyak
kasus, tiap node yang dikunjungi merupakan subgraph.
• Query merupakan kemampuan untuk menampilkan suatu data dari database. Bahasa
query yang dipakai oleh Neo4j sekarang mendukung kemampuan untuk mengambil
seluruh jalur terpendek, mengekstrak dengan mudah nilai pertama dari list dengan null
menggunakan COALESCE, alias column dan menangani hubungan panjang variabel.
Gambar 1. Node have relationship and properties
Optimasi pencarian yang menjadi fokus pada penulisan ini adalah dengan pemanfaatan
graph database yang dirancang untuk menjadi knowledge graph, agar dapat
memberikan hasil yang akurat dengan pencarian similarity search (Wang, 2012) serta
hasil relationship yang didapatkan juga jelas. Dengan Neo4j pendekatan hasil pencarian
tersebut dapat dilakukan pada penggunaan Cypher Query Language (Neo4j Team,
2012). Berikut adalah beberapa pemodelan masalah untuk mengoptimalkan pencarian
guna pendeteksian masalah:
Kasus seperti penggunaan ruangan atau kampus yang sama kadang terjadi dan tidak
jarang menjadi masalah karena mungkin terlalu jauh untuk beberapa dosen atau karena
faktor lainya. Berikut ini adalah pencarian mata kuliah dengan jadwal lokasi kampus
yang dibuat dalam bentuk graph. Algoritma mata kuliah dengan lokasi kampus
“double” yang dipakai mahasiswa. Cari lokasi mata kuliah yang ”double” lokasi
digunakan oleh beberapa mahasiswa:
1. Menentukan matakulaih yang sudah mendapat jadwal di kampus E dan G
2. Menentukan mata kuliah lain yang belum mendapat lokasi.
Query:
START subject
= node:node_auto_index(name = "IMK")
WHERE subject<-[:learn]-person-[: learn]->location
RETURN stuff.name, count(*)
ORDER BY count(*) DESC, stuff.name
Subject Count
“AKUN” 2
“SOD” 1
“IMK” 1
Tabel 1 Hasil dari Graph pencarian kesamaan lokasi
Name Similar_skill
“DIN” 2
“ABI” 1
Perbedaan SQL dan NoSQL terletak pada cara penulisan database. SQL menggunakan
relasional sebagai penyambung antara data-data di dalam tabel database. Sedangkan
NoSQL tidak menggunakan Relasional sebagai cara mereka untuk menyambungkan
antar data. NoSQL tidak menggunakan schema relational. SQL user harus
mendefinisikan table yang akan digunakan. Pada NoSQL tidak perlu untuk
mendefinisikan terlebih dahulu Table yang akan digunakan. Dalam Database SQL data
berbentuk tabel yang terdiri dari sejumlah baris, sedangkan pada NoSQL data tidak
memiliki definisi skema standar yang harus dipatuhi. NoSQL memiliki skema yang
dinamis sedangkan pada database SQL mengikuti skema yang telah ditetapkan.
• NoSQL bisa menampung data yang terstruktur, semi terstruktur dan tidak
terstuktur secara efesien dalam skala besar (big data/cloud).
• Menggunakan Object Oriented Programming dalam pengaksesan atau
manipulasi datanya.
• NoSQL tidak mengenal schema tabel yang kaku dengan format data yang kaku.
NoSQL sangat cocok untuk data yang tidak terstruktur, istilah singkat untuk
fitur ini adalah Dynamic Schema.
• Autosharding, merupakan keadaan jika database NoSQL di jalankan di cluster
server (multiple server) maka data akan tersebar secara otomatis dan merata
keseluruh server.
Dari hasil rata-rata tersebut membuktikan bahwa database MySQL lebih cepat dan stabil
dibandingkan database Neo4j. Akan tetapi perbandingan antara waktu proses antara database
Neo4j dengan database MySQL memiliki kecepatan sendiri. Kecepatan rata-rata yang dimiliki
database MySQL adalah 289.5 ms sedangkan database Neo4j memiliki kecepatan 488.33 ms.
Kecepatan tersebut membuktikan bahwa database MySql lebih cepat dibandingkan dengan
database Neo4j. Keuntungan menggunakan database Neo4j adalah relasi antar node dapat
dibuat tanpa membutuhkan banyak operasi JOIN TABLE seperti pada MySQL. Sedangkan
kelemahannya, database Neo4j masih baru sehingga perlu ada pengembangan lebih jauh untuk
menggunakannya.
DAFTAR PUSTAKA
“Database Engine” [Online]. Available: https://db-engines.com/en/ranking/graph+dbms
[Accessed: 11-Jan-2019].
“Staff and Leadership - Neo4j Graph Database.” [Online]. Available: https://neo4j.com/staff/.
[Accessed: 11-Jan-2019].
Ali et.al, 2012. Pencarian dengan Knowledge Graph. Prosiding Seminal Ilmiah Nasional
Komputer dan Sistem Intelijen.
Safitri, Marina. 2017. Rancang Bangun Restful Web Service pada Sistem Rekomendasi E-
commerce Berbasis Graf Neo4j dengan Metode Collaborative Filtering. Institut Teknologi
Sepuluh November.
Septiamsyah Moch Tegar P dan Andri Heryandi. 2013. Pembangunan Aplikasi Mobile Silsilah
Keluarga.
Widyayanti Claudia Mei dan Andi Iwan Nurhidayat. 2016. Rancang Bangun Sistem Informasi
Hotel Menggunakan Graph Base. Jurnal Manajemen Informatika. Volume 6 (2).