Tampilkan postingan dengan label Big data. Tampilkan semua postingan
Tampilkan postingan dengan label Big data. Tampilkan semua postingan

Juli 19, 2013

Tulisan ini merupakan kelanjutan dari tulisan sederhana tentang basis data graf sebelumnya. Kali ini saya akan menuliskan sedikit tentang memulai menggunakan Titan [1] yang merupakan basis data graf dengan kapabilitas penyimpanan dan pemrosesan data masif (web scale atau big data). Titan adalaha softwae bebas dengan lisensi Apache [2].

Titan sebenarnya terdiri atas 2 bagian:

  1. Distribusi Titan
  2. Storage backend

Distribusi Titan

Titan bisa diperoleh dari repositori Titan [3]. Versi rilis terakhir adalah 0.3.1. Hasil download adalah sebagai berikut:

$ ls
total 74744
drwxr-xr-x  2 bpdp bpdp     4096 Jul 11 06:57 .
drwxr-xr-x 25 bpdp bpdp     4096 Jul 18 10:37 ..
-rw-r--r--  1 bpdp bpdp 76521205 May 14 22:48 titan-all-0.3.1.zip
-rw-r--r--  1 bpdp bpdp       64 Jun 24 12:43 url
$ cat url 
http://s3.thinkaurelius.com/downloads/titan/titan-all-0.3.1.zip
$ 


Mendownload distribusi ini saja tidak cukup, karena distribusi ini "hanya" menyediakan core dari Titan, tidak ada komponen dari software yang berfungsi sebagai native storage backend. Secara umum, penggunaan Titan meliputi aktivasi storage backend (baik secara lokal maupun cluster) kemudian mengkonfigurasi Titan untuk menggunakan storage backend tersebut.

Storage Backend

Titan menggunakan basis data lainnya sebagai "tempat" untuk menyimpan data. Software yang bisa digunakan untuk keperluan ini adalah:
1. Apache Cassandra [4]
2. Apache HBase [5]
3. Oracle BerkeleyDB [6]
Mempelajari Titan saja tidak cukup, pemahaman yang memadai tentang storage backend juga diperlukan. Titan adalah basis data untuk data yang masif sehingga storage backend-nya pun juga software basis data kelas berat. Tingkat kompleksitas dari storage backend bervariasi, tetapi Apache HBase barangkali merupakan storage backend yang paling kompleks.

Memulai Storage Backend

Storage backend yang akan digunakan disini adalah Apache Cassandra. Versi yang digunakan adalah versi terakhir saat tulisan ini ditulis: 1.2.6. Langkah untuk memulai Apache Cassandra sangat mudah dan pada dasarnya hanya meliputi konfigurasi PATH serta file konfigurasi cassandra.yaml. Tarball dari Apache Cassandra pada tulisan ini akan diekstrak di $HOME/software/apache-cassandra-1.2.6 (direktori ini akan dirujuk dengan variabel $CASSANDRA_HOME). Data akan disimpan di $HOME/db/cassandra. Konfigurasi:

$HOME/.bash_profile

...
...
$CASSANDRA_HOME=$HOME/software/apache-cassandra-1.2.6
export PATH=$PATH:$CASSANDRA_HOME/bin
...
...


cassandra.yaml

Ada banyak konfigurasi yang bisa diatur pada file ini [7], tetapi pada bagian ini hanya 4 saja yang akan saya ubah:

cluster_name: 'KintamaniCluster'
data_file_directories:
    - /home/bpdp/db/cassandra/data
# commit log
commitlog_directory: /home/bpdp/db/cassandra/commitlog
saved_caches_directory: /home/bpdp/db/cassandra/saved_caches


Catatan: direktori-direktori diatas dibuat dulu jika belum ada.

Setelah itu, untuk memulai Apache Cassandra, login ke shell baru, setelah itu:

$ cassandra -f

Argumen -f digunakan untuk menampilkan hasil eksekusi di latar depan sehingga kita bisa melihat jika terjadi masalah. Hasilnya nanti akan banyak sekali, saya tampilkan bagian akhirnya saja:

...
...
INFO 05:07:53,670 Node localhost/127.0.0.1 state jump to normal
INFO 05:07:53,686 Startup completed! Now serving reads.
INFO 05:07:53,948 Starting listening for CQL clients on localhost/127.0.0.1:9042...
INFO 05:07:54,010 Binding thrift service to localhost/127.0.0.1:9160
INFO 05:07:54,083 Using TFramedTransport with a max frame size of 15728640 bytes.
INFO 05:07:54,090 Using synchronous/threadpool thrift server on localhost : 9160
INFO 05:07:54,090 Listening for thrift clients...
INFO 05:12:51,681 Compacting [SSTableReader(path='/home/bpdp/db/cassandra/data/system/schema_columnfamilies/system-schema_columnfamilies-ic-15-Data.db'), SSTableReader(path='/home/bpdp/db/cassandra/data/system/schema_columnfamilies/system-schema_columnfamilies-ic-13-Data.db'), SSTableReader(path='/home/bpdp/db/cassandra/data/system/schema_columnfamilies/system-schema_columnfamilies-ic-16-Data.db'), SSTableReader(path='/home/bpdp/db/cassandra/data/system/schema_columnfamilies/system-schema_columnfamilies-ic-14-Data.db')]
INFO 05:12:52,233 Compacted 4 sstables to [/home/bpdp/db/cassandra/data/system/schema_columnfamilies/system-schema_columnfamilies-ic-17,].  20,712 bytes to 6,933 (~33% of original) in 550ms = 0.012021MB/s.  10 total rows, 4 unique.  Row merge counts were {1:2, 2:0, 3:0, 4:2, }


Titan

Setelah men-donwload Titan, ekstrak hasil download tersebut di suatu direktori tertentu (penulis menempatkan di $HOME/software/titan, selanjutnya akan disebut $TITAN_HOME). Saya juga menempatkan variabel lingkungan PATH di .bash_profile sebagai berikut:

...
...
$TITAN_HOME=$HOME/software/titan
export PATH=$PATH:$TITAN_HOME/bin
...
...


Titan mendukung penuh TinkerPop stack sehingga kita bisa menggunakan tools dari TinkerPop stack, baik untuk REPL (menggunakan Gremlin) maupun dalam source code. Contoh sesi REPL dari Gremlin adalah sebagai berikut:

$ gremlin.sh 

         \,,,/
         (o o)
-----oOOo-(_)-oOOo-----
gremlin> conf = new BaseConfiguration();
==>org.apache.commons.configuration.BaseConfiguration@13015e8
gremlin> conf.setProperty("storage.backend","cassandra");
==>null
gremlin> conf.setProperty("storage.hostname","127.0.0.1");
==>null
gremlin> g = TitanFactory.open(conf);
13/07/20 06:29:02 INFO impl.ConnectionPoolMBeanManager: Registering mbean: com.netflix.MonitoredResources:type=ASTYANAX,name=ClusterTitanConnectionPool,ServiceType=connectionpool
13/07/20 06:29:02 INFO impl.CountingConnectionPoolMonitor: AddHost: 127.0.0.1
13/07/20 06:29:02 INFO impl.ConnectionPoolMBeanManager: Registering mbean: com.netflix.MonitoredResources:type=ASTYANAX,name=KeyspaceTitanConnectionPool,ServiceType=connectionpool
13/07/20 06:29:02 INFO impl.CountingConnectionPoolMonitor: AddHost: 127.0.0.1
==>titangraph[cassandra:127.0.0.1]
gremlin> bambang = g.addVertex(null);
==>v[360004]
gremlin> domain = g.addVertex(null);
==>v[360008]
gremlin> bambang.setProperty("name", "Bambang Purnomosidi");
==>null
gremlin> domain.setProperty("name", "Pragmatic Web");
==>null
gremlin> e = g.addEdge(null, bambang, domain, "researching");
==>e[7ygD-1vEw-2F0LaTPQTs][360004-researching->360008]
gremlin> print e.getVertex(Direction.OUT).getProperty("name") + "---" + e.getLabel() + "-->" + e.getVertex(Direction.IN).getProperty("name");
Bambang Purnomosidi---researching-->Pragmatic Web==>null
gremlin> 


Jika ingin membuat program yang memanfaatkan Titan dan storage backend-nya ini, pengetahuan yang diperlukan  akan lebih kompleks dan memerlukan tulisan tersendiri. We'll talk about it later. Stay tune.

Proses Selanjutnya

Setelah berbagai setting ini, jika komputer mati (untuk server seharusnya tidak :-D), setiap kali login, kita sudah bisa langsung mengeksekusi Apache Cassandra, setelah itu mengaktifkan Titan (tidak perlu konfigurasi ribet lagi):

$ cassandra -f
$ gremlin.sh


Hanya itu saja, kecuali anda ingin coding, tentu perlu langkah lain.

So, Enjoy big data!

Referensi

[1] http://titan.thinkaurelius.com
[2] http://www.apache.org/licenses/LICENSE-2.0.html
[3] http://s3.thinkaurelius.com/downloads/titan/titan-all-0.3.1.zip
[4] http://cassandra.apache.org
[5] http://hbase.apache.org
[6] http://www.oracle.com/technetwork/database/berkeleydb/overview/index-093405.html
[7] http://wiki.apache.org/cassandra/StorageConfiguration

Juli 14, 2013

Pengantar Teknologi Basis Data Graf

Artikel ini merupakan pengantar ke basis data graf yang sekarang mulai marak dibicarakan dan diimplementasikan. Pengantar ini diperlukan sebelum membahas software basis data graf terdistribusi menggunakan Titan [1]. Jika akan dikategorikan, Titan ini masuk ke dalam kategori basis data NOSQL (Not Only SQL) untuk membedakan dengan basis data relasional (RDBMS) seperti PostgreSQL, MySQL, Oracle Database 10g yang menggunakan SQL sebagai bahasa untuk query (DDL maupun DML). Jika sudah terbiasa dengan "standar" SQL, bersiap-siaplah kaget dengan dunia NOSQL yang sangat bervariasi [2]. Artikel ini akan terdiri atas beberapa seri dan nantinya akan lebih dikonsentrasikan ke penggunaan Titan.

Big Data

Tulisan ini sama sekali tidak untuk menunjukkan bahwa RDBMS adalah teknologi yang sudah usang dan tidak pantas dipakai, tapi saya lebih meyakini bahwa setiap kreasi itu mempunyai kesesuaian dalam menyelesaikan masalah tertentu. Demikian juga dengan NOSQL yang kebanyakan berasal dari kebutuhan dari pengelolaan data yang masif. Pengelolaan data yang masih ini dikenal juga dengan 2 istilah:
  1. "Web scale" untuk menunjukkan kemampuan skalabilitas pada aplikasi yang memerlukan data sangat besar yaitu aplikasi Web. Tentu ini bukan aplikasi Web yang bersifat personal (seperti wiki sederhana, CMS dengan ruang lingkup kecil, dan sejenisnya), tetapi lebih pada aplikasi Web skala besar dengan akses dan keanggotaan sampai ke seluruh dunia (misal: Facebook, Twitter).
  2. "Big data", untuk menunjukkan kebutuhan data yang sangat masif karena seringkali data bersifat realtime dan berjumlah sangat besar sehingga harus dikelola dalam cluster-cluster. Istilah ini mulai populer seiring dengan paper dari Google: MapReduce (framework untuk model pemrograman bagi pemrosesan data yang sangat besar) [3]  dan BigTable [4].

Basis Data Graf

Basis data graf (Graph Database) adalah basis data yang menggunakan graf dalam pemodelan data. Graf merupakan cabang ilmu dari matematika yang dikenal mempunyai keterkaitan aplikasi dengan banyak disiplin ilmu lainnya. Teori graf sudah berumur panjang. Teori graf ini pertama kali dikenal sejak Leonhard Euler menulis paper "Seven Bridges of Königsberg" pada tahun 1736. Dalam matematika, graf ini merupakan bagian utama dari Matematika Diskrit. Meski banyak buku yang ditulis terkait dengan teori graf, buku dari Frank Harary tentang teori graf pada 1969 membuat banyak peneliti dari berbagai disiplin ilmu menyadari pentingnya teori graf terkait dengan berbagai macam disiplin ilmu. Teori graf ini juga dikembangkan di dunia software untuk pemodelan data, terutama untuk pemodelan dan analisis yang memerlukan keterkaitan dalam bentuk graf. Perkembangan akhir-akhir ini menunjukkan bahwa teori graf ini bisa diterapkan untuk basis data dan membentuk basis data graf. 

Pada basis data graf, data akan dimodelkan dalam bentuk graf (terdiri atas sekumpulan vertex (node) dan dihubungkan dengan dengan edge / arc) yang memungkinkan berbagai macam operasi dilakuan pada struktur data tersebut, misalnya traversal, pattern matching, penemuan "knowledge" baru (reasoning), dan lain-lain. Banyak aspek kehidupan manusia pada dasarnya bisa dimodelkan dengan graf. Contoh paling sederhana, fasilitas rekomendasi teman pada Facebook adalah hasil dari penerapan teori graf: saya mengenal A, A mengenal B, B mengenal C, C mengenal D, dan seterusnya, kemudian dicari pola yang sama antar individu tersebut sehingga bisa dihasilkan rekomendasi bahwa saya mungkin juga mengenal D.

Beberapa basis data yang menggunakan graf untuk pemodelan data antara lain:
  1. OrientDB [5]
  2. Neo4J [6]
  3. AangoDB [7]
  4. HyperGraphDB [8]
  5. InfiniteGraph [9]
  6. Titan
Kebanyakan basis data graf disediakan untuk keperluan Big Data, meski ada juga in-memory graph database yang cocok untuk pemrosesan yang cepat dan tidak untuk keperluan pengelolaan data masif.

Bentuk Spesifik dari Basis Data Graf: TripleStore dan QuadStore

TripleStore merupakan pemodelan data yang berdasarkan pada spesifikasi dari W3C yaitu RDF (Resource Description Framework). Pada pemodelan ini, pemodelan akan didasarkan pada S-P-O (Subyek Predikat Obyek), misalnya "Bambang menulis artikel". QuadStore adalah TripleStore yang menyertakan dukungan Named Graph yang memungkinkan suatu graf diidentifikasikan berdasarkan pada URI. Contoh dari basis data QuadStore ini adalah OpenLink Virtuoso [10]. Beberapa contoh TripleStore:

1. Bigdata [11]
2. AllegroGraph [12]
3. Meronymy - sekarang berganti nama menjadi SparkleDB [13] - sekaligus QuadStore

"Standar" Basis Data Graf: Tinkerpop Stack

Dengan adanya banyak implementasi tersebut, tentu akan mulai banyak kesulitan karena akan muncul berbagai macam implementasi dan pada akhirnya menyebabkan para pengguna dan developer untuk mempelajari basis data tersebut secara spesifik. Saat ini, dikembangkan "standar" untuk pengelolaan basis data graf tersebut. Saya tulis "standar" menggunakan tanda petik karena standar disini tidak diimplementasikan dalam suatu organisasi standar seperti ANSI atau ISO, tetapi lebih ke aarah kesepakatan antara banyak developer yang bekerja dengan basis data graf dan dilakukan oleh komunitas. Standar yang banyak dianut saat ini dikembangkan oleh Tinkerpop [14] dan mempunyai standar paling mendasar yang dikenal dengan sebutan Blueprints [15].

Standar dari Tinkerpop ini terdiri atas berbagai lapisan (sehingga sering disebut sebagai 'stack'). Standar paling mendasar adalah Blueprints. Standar lainnya bisa dilihat di website Tinkerpop. Pada artikel ini saya lebih menekankan pada kedudukan dari berbagai macam standar tersebut. Standar Tinkerpop ini jika diibaratkan dalam dunia pemrograman yang melibatkan SQL di Java, mempunyai kedudukan yang setara dengan JDBC. Dengan demikian, skema dari standar ini adalah sebagai berikut:

Source code <-----> Tinkerpop API <-----> basis data graf

Dengan demikian, source code akan bersifat portable dan tidak terlalu tergantung pada basis data graf tertentu. Vendor basis data graf perlu mengimplementasikan "driver" Tinkerpop supaya bisa diakses menggunakan API Tinkerpop. Pada saat ini, banyak sekali software basis data graf yang mengimplementasikan API tersebut [16].

Bagaimana dengan TripleStore dan QuadStore pada Tinkerpop?

Sebagai bagian dari basis data graf, TripleStore dan QuadStore juga mendapatkan perhatian dari Tinkerpop. Tinkerpop menyediakan Ouplementations [17] yang menggunakan SAIL dari Sesame [18] sehingga RDF ini juga bisa diakses melalui stack Tinkerpop meskipun relatif lebih rumit. 

Referensi

[2] Lihat misalnya di http://www.nosql-databases.org