Fulltext Indexing untuk mengoptimalkan pencarian data


Pasti kita sudah mengenal search engine yaitu mesin pencari apapun yang kita ketikan. Hasilnya begitu cepat dalam beberapa detik saja sudah tersaji di halaman hasil search engine. Namun mungkin kita belum tahu bagaimana sih mesin pencari dapat mencari begitu cepat dalam tumpukan data yang begitu besar. Full text indexing adalah salah satu teknik untuk mengoptimalkan pencarian data.

Full text indexing merupakan feature database yang salah satunya adalah MySQL, database yang banyak digunakan oleh web developer untuk mengembangkan aplikasi webnya. Full text indexing adalah teknik pencatatan atau penyimpanan data di dalam tabel database dimana data disimpan dalam bentuk terstruktur biasanya B-TREE atau struktur data lainnya dimana format penyimpanan ini memudahkan database dalam melakukan penelusuran data.

Contoh paling sederhana adalah dalam pencarian isi blog. Isi blog biasanya disimpan dan di index didalam database sehingga pencarian dapat dilakukan bila kita mencari isi post tertentu. Full text indexing akan melakukan index pada tiap kata yang ada didalam suatu post yang kurang lebih seperti ini:

  • kata “adobe” ada pada post dengan id 10,12,20
  • kata “photoshop” ada pada post dengan id 10, 13, 16
  • kata “firework” ada pada postdengan id 2, 10, 20
  • dan seterusnya

Dengan demikin bila kita memasukkan keyword adobe dalam pencarian maka kita dirujuk ke post dengan id 10, 12, dan 20. Namun tentu tekniknya tidak sederhana itu masih ada beberapa teknik lainnya yang bekerja dalam pencarian data. Contoh diatas hanyalah contoh sederhana dalam pencarian dengan bantuan full text indexing.

Full text indexing yang biasanya berguna mengoptimalkan pencarian pada database. Untuk jumlah data dengan skala menengah database dapan melakukan pencarian dengan cepat. Namun masalah akan timbul pada saat data terus bertambah dan jumlahnya mencapai jutaan baris. Masalah yang timbul antara lain

  • lambat dalam melakukan insert atau penyimpanan data. Hal ini dikarenakan setiap data baru yang masuk maka database harus melakukan pengaturan index agar indexing berfungsi dengan baik
  • memerlukan kapasitas penyimpanan yang besar, data dan index disimpan terpisa dalam database sehingga makin besar data maka index juga akan bertambah besar.
  • konsumsi resource berlebihan, dalam penelusuran index akan diload kedalam memory dan menelusuri untuk mencari data yang diinginkan. Makin besar index makin besar pula memory yang dibutuhkan.

Bila demikian bagaimana beberapa website indexer seperti mininova.org yang meng-index torrent tracker yang jumlahnya jutaan data bisa menyajikan hasil pencarian dalam beberapa detik? Rahasianya adalah mereka melakukan external indexing, yaitu melakukan indexing data diluar database. Sehingga pencarian dan penelusuran data dilakukan di luar database sehingga tidak mengurangi performance database. External indexing dibantu dengan aplikasi yang khusus untuk melakukan indexing. Dua diatara aplikasi tersebut yang menjadi favorit adalah:

  • Lucene, aplikasi indexing yang  paling terkenal. Dikembangkan dalam platform Java. Performance dan fungsinya sangat baik, namun masalahnya untuk berkolaborasi dengan PHP maka Lucene harus di porting ke PHP. Menurut beberapa sumber performance Lucene asli yang berplatform Java berbeda jauh dengan turunannya pada PHP dimana porting Lucene ke PHP memiliki performance lebih rendah.
  • Sphinx, aplikasi indexing yang mendukung integrasi dengan MySQL dan PHP. Dengan demikian kita dengan melakukan indexing data yang ada pada MySQL dan menggunakan hasil indexing pada Sphinx untuk pencarian dengan PHP. Pada dasarnya memang dikembangkan untuk dintegrasikan dengan database.

Saya lebih memilih menggunakn Sphinx karena kemudahannya dalam integrasi dengan MySQL dan PHP. Namun bila anda tertarik dengan Lucene, Zend Framework juga memberikan dukungan kepada Lucene dengan mengembangkan component untuk Zend Framework untuk memudahkan pengembangan aplikasi dengan Lucene.

Konsep dalam melakukan integrasi dengan aplikasi web bisa dilakukan dengan cara sebagai berikut:

  • Data disimpan dalam database dan external indexer. Jadi setiap memasukkan databaru dan update harus melakukan pada keduanya, database dan external indexer.
  • Untuk setiap pencarian dan penelusuran data yang biasa dilakukan dengan query SQL “SELECT” maka dilakukan pada external indexer bukan pada database.

Dengan konsep diatas diharapkan dapat memberikan performance lebih baik untuk pencarian dan penelusuran data dalam database. Namun cara ini mengorbankan performance dalam penambahan dan perubahan data karena harus melakukannya 2 kali yaitu pada database dan external indexer. Jadi penggunaan external full text indexer sebaiknya hanya digunakan pada aplikasi dengan jumlah data yang sangat besar dan lebih banyak menjalankan fungsi pencarian data dan penelusuran data dibandingkan dengan penambahan dan perubahan data.

Referensi:

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s