Tampilkan postingan dengan label ArangoDB. Tampilkan semua postingan
Tampilkan postingan dengan label ArangoDB. Tampilkan semua postingan

Mei 03, 2015

I was once the maintainer of ArangoDB package in AUR. While the package was fine (I think), I am quite tired of having it compiled myself. It's just I am getting older, I guess. Then I prefer binary version after leaving maintainer role. Now I can use it using RPM file of OpenSuSE Factory version - available from ArangoDB download page. Some tweaks are needed anyway. I will give you some tweaks that I successfully use to make it works. In this post, I put all of installation files under /home/bpdp/software/arangodb (a.k.a $ARANGO_HOME).

  • cd $ARANGO_HOME
  • Install rpmextract package: # pacman -S rpmextract
  • Extract RPM file: $ rmpextract.sh path/to/arangodb-2.5.3-12.1.i586.rpm
  • Move conf files into etc: $ mv etc/arangodb/*.conf etc/
  • Delete init.d dir (we don't need that): $ rm -rf etc/int.d
  • All database will reside in db, so: $ mkdir db
  • Here's the dir structure:

$ ls
total 48
drwxr-xr-x  9 bpdp bpdp  4096 May  4 10:31 .
drwxr-xr-x 91 bpdp bpdp  4096 May  4 10:16 ..
drwxr-xr-x  2 bpdp bpdp  4096 May  4 10:12 bin
drwxr-xr-x  2 bpdp bpdp  4096 May  4 10:19 db
drwxr-xr-x  2 bpdp bpdp  4096 May  4 10:30 etc
drwxr-xr-x  4 bpdp bpdp  4096 May  4 10:12 lib
drwxr-xr-x  2 bpdp bpdp  4096 May  4 10:12 sbin
drwxr-xr-x  5 bpdp bpdp  4096 May  4 10:12 share
drwxr-xr-x  4 bpdp bpdp  4096 May  4 10:12 var
$

  • Create all needed dirs: cluster and mri (ruby): $ mkdir -p share/arangodb/mr/client/modules; mkdir -p shar/arangodb/mr/common/modules.
  • $ mkdir -p var/log/arangodb/cluster; mkdir -p lib/arangodb/cluster
  • Edit etc/*.conf to reflect all of those dir location.
  • Delete unneeded dirs/files: $ rm -rf lib/systemd/; rm -rf etc/init.d/; rm -rf sbin/rcarango.
  • Set PATH and MANPATH. You may put this inside $HOME/.bashrc:

export ARANGO_HOME=$HOME/software/arangodb
export PATH=$PATH:$ARANGO_HOME/bin:$ARANGO_HOME/sbin
export MANPATH=$MANPATH:$ARANGO_HOME/share/man
Installation finish. You should source .bashrc or open another terminal and then you may active the server daemon and / or arango shell:

  • Activate arango daemon: $ arangod -c ~/software/arangodb/etc/arangod.conf
  • Enter arango shell: $ arangosh -c ~/software/arangodb/etc/arangosh.conf
That's all I guess, you may now use ArangoDB. 


Uf wiederluege! Na shledanou! Auf Wiedersehen! Bye Bye! Adiau! ¡Hasta luego! Au revoir!
Arrivederci! להתראות! Tot ziens! Adjö! Εις το επανιδείν! さようなら До свидания!

April 22, 2013

Go + REST Client Untuk Mengakses URL Dengan Respon JSON Dinamis

REST merupakan pola arsitektur aplikasi yang memanfaatkan HTTP untuk mengeksploitasi layanan / services serta method dari HTTP (GET, POST, DELETE, dll) untuk berkomunikasi antara klien dengan server. REST merupakan hasil disertasi dari Roy T. Fielding, bisa dibaca lengkap di http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm. Enaknya menggunakan REST adalah kemudahan interoperabilitas data maupun layanan serta. Hal ini juga berlaku ke banyak basis data NOSQL yang biasanya menyertakan REST API sehingga implementasi driver bisa dengan mudah dibuat tanpa akses low level networking seperti halnya masa-masa pra REST. 

Go juga menyediakan akses yang cukup lengkap untuk keperluan HTTP client ini, meskipun masih tetap diperlukan thin layer untuk wrapper guna mempermudah akses ini. Jika memang tidak akan membuat wrapper, bisa menggunakan berbagai pustaka REST yang tersedia. Pada tulisan ini, saya akan menggunakan pustaka restclient (https://github.com/jmcvetta/restclient) yang dibuat oleh Jason McVetta (https://github.com/jmcvetta). 

Basis data NOSQL biasanya mempunyai fitur horizontal scalability yang memungkinkan setiap dokumen (dalam SQL bisa disamakan dengan record / row) bisa mempunyai komponen yang berbeda-beda dan scalable. Salah satu contoh yang akan saya bahas disini adalah ArangoDB (http://www.arangodb.org). ArangoDB menyediakan REST API yang dijelaskan dengan lengkap disini: http://www.arangodb.org/manuals/current/ImplementorManual.html. Untuk tulisan ini, saya akan memberikan contoh http://server:port/_api/document untuk mengambil data dokumen. Sintaks lengkap dari API ini adalah:


GET /_api/document/document-handle


Jika hasilnya bisa diprediksi, dalam artian, kita mengetahui struktur data yang akan diambil, maka struktur itu bisa kita definisikan menggunakan struct, tetapi tentu saja ini hanya pada kondisi tertentu saja. Kebanyakan, jika kita akan mengakses dokumen, fitur skalabilitas horizontal menyebabkan tiap dokumen mempunyai isi yang berbeda-beda. Jadi bisa dikatakan bahwa strukturnya berupa JSON yang dinamis. Bagaimana mengelola ini menggunakan Go?

Jika menemui kasus seperti ini, maka kita bisa mendeskripsikan isi yang akan kita akses tersebut menggunakan map[string]string. Berikut adalah program yang saya gunakan untuk mengakses dokumen di ArangoDB:

akses-doc-arangodb.go

package main
import (
  "fmt"
  "github.com/jmcvetta/restclient"
)
func main() {
  var jml int
  var s map[string]string
  r := restclient.RequestResponse{
    Url:    "http://localhost:8529/_api/document/_users/1736896",
    Method: restclient.GET,
    Data:   "",
    Result: &s,
  }
  _, err := restclient.Do(&r)
  if err != nil {
    panic(err)
  }
  jml = len(s)
  fmt.Printf("Jumlah komponen = %d\n", jml)
  fmt.Print(s)
  fmt.Println("\nUser = ", s["user"])
}

Hasilnya adalah sebagai berikut:

Jumlah komponen = 6
map[_rev:1736896 _key:1736896 active: user:root _id:_users/1736896 password:$1$0cc26832$d582f08ab0898d7d1ab2a18e221d7dc1a2ea93ff80a093678a566fae35bbfc60]
User =  root

Jadi, sekarang waktunya ancang-ancang untuk membuat driver ArangoDB untuk Go menggunakan REST API yang disediiakan ArangoDB. Stay tune!



Agustus 23, 2012

Arch Linux Package for ArangoDB

Finally I can finish ArangoDB package PKGBUILD for Arch Linux. The people at triAGENS are helpful. Have to say thank you for their help, especially @steemann, @loremsqlsum, and @fceller. The package can be installed just by using yaourt -S arangodb.

The package PKGBUILD can be downloaded from https://aur.archlinux.org/packages.php?ID=62227



Enjoy!

Agustus 21, 2012

Change Python Interpreter Temporary (python3 -> python2)

I came across this difficulty when I try to install ArangoDB. It comes with V8 Javascript engine from Google bundled in. Installing V8 requires Python 2, not Python 3 which is the default in my Arch Linux box.

[bpdp@bpdp-arch V8]$ ls `which python`
lrwxrwxrwx 1 root root 7 Apr 24 06:48 /usr/bin/python -> python3
[bpdp@bpdp-arch V8]$

Luckily, V8 uses "#/usr/bin/env python", not "#/usr/bin/python". To change this behaviour, all I have to do is just ask "env" to use my python2 interpreter. Here's how:

1. Create symlink to python2 under the name "python"
I put the symlink into my "$HOME/bin" directory.
$ cd ~/bin
$ ln -s /usr/bin/python2 python

2. Put into PATH

$ export PATH=~/bin:$PATH

"~/bin" should preced $PATH because env use the first setting.

[bpdp@bpdp-arch arangodb]$ which python
/home/bpdp/bin/python
[bpdp@bpdp-arch arangodb]$ env python
Python 2.7.3 (default, Apr 24 2012, 00:06:13) 
[GCC 4.7.0 20120414 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

There you go!