Showing posts with label elasticsearch. Show all posts
Showing posts with label elasticsearch. Show all posts

Friday, February 22, 2013

Noqsl Meta - Cassandra, Mongodb, CouchDB, Redis,ElasticSearch, Kyoto Tycoon, Neo4j

Cassandra, Mongodb, CouchDB, Redis,ElasticSearch, Kyoto Tycoon, Neo4j yeteneklerine pek değinmeden genel bilgilerini karşılaştırmalı sunan bir tablodur. Bir performans karsilastirmasi degildir!

MongoDB 

Yazıldığı Dil: C++
Lisans: AGPL
Veri İletişim Protokolü: binary (BSON)
En iyi kullanım örneği :  Dinamik veri yapisi ihtiyaclarinizda. Surekli yeni diskler ve makinelerle genisletmeniz gerekecek derecede fazla buyuyen veriniz oldugunda.  CouchDb nin cabuk buyuen ve kolay kontrol edilebilen bir haline ihtiyac duydugunuzda.

Redis

Yazıldığı Dil: C/C++
Lisans: BSD
Veri İletişim Protokolü: Telnet-like
En iyi kullanım örneği :  Disk-backed in-memory database en onemli ozelligi. MongoDb orneginden oldugu gibi surekli artan verilerde degil ancak surekli ve sikca degisen verilerde kullanilmasi onerilir..

CouchDB

Yazıldığı Dil: Erlang
Lisans: Apache
Veri İletişim Protokolü: HTTP/REST
En iyi kullanım örneği :  Bi-directional (!) replication en onemli ozelligi. MongoDb de belirtigi gibi cok ve surekli buyuen datalar olmadiginda ama yine esnek bir data yapisi ve ayni zamanda versiyonlama çok önemli oldugunda.

Cassandra (1.2)

Yazıldığı Dil: Java
Lisans: Apache
Veri İletişim Protokolü: Thrift & custom binary CQL3

En iyi kullanım örneği :  Write/Read orani çok çok yuksekse ve yazma hizi onemliyse (mesela loglar). Java ile cok iyi hider

All nodes are similar, as opposed to Hadoop/HBase
Cross-datacenter replication
Querying by column, range of keys (Requires indices on anything that you want to search on)
Can be used as a distributed hash-table, with an "SQL-like" language, CQL (but no JOIN!)



Neo4j (V1.5M02)

Yazıldığı Dil: Java
Lisans: GPL, some features AGPL/commercial
Veri İletişim Protokolü: HTTP/REST (or embedding in Java)

En iyi kullanım örneği :  Graph islemlerinizde harika cozum sunar!
Full ACID
For searching routes in social relations, public transport links, road maps, or network topologies.

ElasticSearch 

Yazıldığı Dil: Java
Lisans: Apache
Veri İletişim Protokolü: JSON over HTTP (Plugins: Thrift, memcached)
Stores JSON documents

En iyi kullanım örneği :  Esnek dokumanlariniz ve gelismis arma ihtiyaclariniz oldugunda. fuzzy search ihtiyaci. Geodistance ihtiyaci oldugunda.

Kyoto Tycoon (0.9.56)

Yazıldığı Dil: C++
Lisans: GPL
Veri İletişim Protokolü: HTTP (TSV-RPC or REST)

En iyi kullanım örneği :  Memcache'e alternatif daha yetenekli bir seyler aradiginizda cozum olacaktir.

Hot backup, asynchronous replication (MongoDb'de de gelismis olarak olan bir ozellik.)
background snapshot of in-memory databases
Auto expiration (can be used as a cache server) (Redis'de de olan bir ozellik)



Thanks to Kristóf

Sunday, May 6, 2012

IndexTank - Real-time Search and Indexing System

Linkedin epey bir sure IndexTank'i opensource yapmisti [1]. IndexTank opensource olmadan once ElasticSearch ile hayranlikla cokca zaman gecirmisitim. Ve su kadarini soyleyebilirim ikisini de search servisi olarak kullanan bir son kullanici olarak IndexTank'da daha iyi olan bir ozellik goremedim.

Ikisi de Apache Lucene uzerine calisiyor. Ancak IndexTank oldukca eski bir surumunu kullaniyor. Gercekten eski bir surum. Ayar dosyasinda 3.0 yaziyor [2] ki su anki Lucene cekirdegi surumu 3.6  [3].

ElasticSearch guide sayfasi [4] alisilagelmis bir dokumantasyon sayfasi gibi olmasa da oldukca ise yarayan egelenceli bir sayfa. ElasticSearh aktif bir mailliste de sahip. IndexTank icin yeterli bir community ve dokumantasyona ulasamadim. Cunku http://indextank.com/ sayfasi aktif degil uzun suredir. Sadece bir linkedin grup sayfasi var ve oldukca yetersiz.


Hemen kurup deneyebilirsin : https://github.com/linkedin/indextank-engine
Kendi performans testlerinizi kendiniz yapabilirsiniz ama tek makine uzerinde kiyaslama yapmak dogru olmayabilir. Cunku IndexTank cloud tabanli bir yapida basarisini kanitlamis bir sistem olarak tanitiliyor.



maven ile derlemeniz gerek. Yani eger sahip degilseniz once maven kurmalisiniz.

Indirdikten sonra

mvn compile package assembly:single

calistirmaniz yeterli artik "target/" altinda olusan jar dosyasini calistirabilirsiniz su sekilde

java -cp target/indextank-engine-1.0.0-jar-with-dependencies.jar com.flaptor.indextank.api.Launcher


Java, python,  ruby ve  php icin onerilen Api client'lar sunlar


Java: https://github.com/flaptor/indextank-java
Python: https://github.com/flaptor/indextank-py
Ruby: https://github.com/flaptor/indextank-rb
PHP: https://github.com/flaptor/indextank-php


Veri alisverisi yine json formatinda. github sayfasinda birkac ornek bulabililirsiniz.



1. "IndexTank is now open source!" : http://engineering.linkedin.com/open-source/indextank-now-open-source
2. https://github.com/linkedin/indextank-engine/blob/master/pom.xml#L19
3. Apache Lucene Releases : http://lucene.apache.org/core/downloads.html
4. ElasticSearch Guide : http://www.elasticsearch.org/guide/

Tuesday, August 16, 2011

ElasticSearch Geo Location Search

Daha önce ElasticSearch kullanmaya başladığımdan ve gelişmiş bir kaç özelliğinden bahsetmiştim.

ElasticSearch gelişmiş filtrelemesi ile son derece performanslı olarak polygonal geo search ve distance calculation yapabildim. Aşağıdaki örnekte ayrıca "distance" parametresi verilerek ilgili uzaklıktaki nokta kayıtları da getirilebiliyor. Test için oluşturduğum ElasticSearch indexinde 300.000 rasgele nokta vardı. Sorgu hızını raporlamadım ancak genellikle 0.01 - 0.03 sn civarında cevap aldım. ElasticSearch kurlu makineye ram'i az ayırdığımdan cevap süresi biraz uzamış oldu. Genel oalrak performansını sevdim ancak. Location bazlı aramalar için de ideal bir search engine.

{
    "filtered" : {
        "query" : {
            "match_all" : {}
        },
        "filter" : {
            "geo_polygon" : {
                "place.location" : {
                    "points" : [
                        {"lat" : 40, "lon" : -70},
                        {"lat" : 30, "lon" : -80},
                        {"lat" : 20, "lon" : -90}
                    ]
                }
            }
        }
    }
}


Meseleyi irdeleyin
http://www.elasticsearch.org/guide/
http://www.elasticsearch.org/blog/2010/08/16/geo_location_and_search.html

Friday, August 12, 2011

ElasticSearch advanced search

ElasticSearch search engine olarak hala gözümde son derece esnek ve hızlı. Benzer içerikleri veya duplicate içerikleri bulmak için de gayet hızlı bir tool olarak kullanıyorum.

ElasticSearch ileri düzey filtreme teknikleri var bunlardan birisi de FLT (Fuzzy Like This Query) . İleri düzey çünkü zaten var olan More Like This filtresinin Levenstain ile geliştirilmiş hali gibi.

Text verileriniz içinde benzer olanları veya duplicate olanları bulmak için oldukça ideal.

Örnek bir sorgu

{
"fuzzy_like_this" : 

  {
    "fields" : ["blog.title", "blog.tags"],
    "like_text" : "futbol ve sinema hakkında",
    "max_query_terms" : 20, "min_similarity" : 0.5
  }
}







Meseleyi irdeleyin :