'River'에 해당되는 글 3건

  1. 2014.11.13 [Elasticsearch] JDBC River 추가 REST API 팁!!
  2. 2014.11.12 JDBC River의 strategy 란?
  3. 2014.06.13 [Elasticsearch] JDBC River 알아보기.

[Elasticsearch] JDBC River 추가 REST API 팁!!

Elastic/Elasticsearch 2014. 11. 13. 12:57

오픈소스의 좋은 점이기도 하지만 조금 불편한 점도 있죠.

사용방법이나 어디 레퍼런스가 없어서 소스코드를 확인해야만 하는 노가다!!


ㅎㅎ 뭐 그래도 재밌으면 그걸로 만족 ^^


JDBC River 테스트 중에 2014년 10월에 추가된 API 가 있어서 테스트 하던 중 아래 에러가 나와서 소스코드 확인 후 어떻게 사용해야 하는지 알게 되었내요.


[에러코드]

{"error":"NullPointerException[null]","status":500}


[추가된 REST API]

_state

_suspend

_abort

_resume

_run


[테스트 버전]

elasticsearch 1.3.4

elasticsearch jdbc river 1.3.4.4


[Request 방법]

$ curl -d "{\"rivername\":\"my_jdbc_river\"} -XPOST http://localhost:9200/_river/jdbc/{REST_API}

- 일단 _state 는 GET 입니다. POST 로 던지고 안된다고 하지 마세요.

- 문서에도 없는 내용입니다. rivername 이라는 parameter 를 구성해서 넘겨줘야 합니다.

- JSON 형태로 넘기셔야 됩니다.


기타 자세한 설명은 아래 링크 참고하세요.

Ref. https://github.com/jprante/elasticsearch-river-jdbc


:

JDBC River의 strategy 란?

Elastic/Elasticsearch 2014. 11. 12. 11:41

https://github.com/jprante/elasticsearch-river-jdbc


현재까지 제공되는 strategy 옵션은 두개 입니다.


1) simple

2) column


simple은 단순 fetch 와 indexing or delete 작업을 수행 하는 것 이라고,

column은 마지막에 수행한 정보를 기록해 두었다가 값을 비교하여 indexing or delete 작업을 수행 하는 것 입니다.


:

[Elasticsearch] JDBC River 알아보기.

Elastic/Elasticsearch 2014. 6. 13. 18:25
금요일 퇴근 시간이 얼마 안남은 관계로 짧게 쓰겠습니다.

원문 : https://github.com/jprante/elasticsearch-river-jdbc

[설치방법]

# installation

# river install

https://github.com/jprante/elasticsearch-river-jdbc

bin/plugin --install jdbc --url http://xbib.org/repository/org/xbib/elasticsearch/plugin/elasticsearch-river-jdbc/1.2.1.1/elasticsearch-river-jdbc-1.2.1.1-plugin.zip


# mysql jdbc driver install

curl http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.31.tar.gz

curl -o mysql-connector-java-5.1.31.zip -L 'http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.31.zip/from/http://cdn.mysql.com/'

# plugins/jdbc/ 아래로 mysql connector jar 파일 저장.

mv ./mysql-connector-java-5.1.31/mysql-connector-java-5.1.31-bin.jar .


제가 작성한건 약식이니까 원문 참고하셔서 설치 하시기 바랍니다.

그리고 저는 mysql  로 테스트 하였습니다.

(뭐 다른 DBMS도 크게 다르지는 않습니다.)


[River 등록]

# river register

curl -XPUT 'localhost:9200/_river/jdbc_mysql/_meta' -d '{

    "type" : "jdbc",

    "jdbc" : {

        "url" : "jdbc:mysql://localhost:3306/test",

        "user" : "root",

        "password" : "",

        "sql" : "SELECT item_id, item_code, item_name, price, regdate FROM TBL_ITEM_INCREMEN WHERE ts BETWEEN NOW() - 30 AND NOW() ANd fetch_flag = 'F'",

        "index" : "river_jdbc_mysql", # default jdbc

        "type" : "tbl_item_increment", # default jdbc

        "strategy" : "simple",

        "schedule" : null,

        "cronpoolsize" : 4,

        "rounding" : null,

        "scale" : 2,

        "ignore_null" : false,

        "autocommit" : false,

        "fetchsize" : 10, /* Integer.MIN for MySQL */

        "max_rows" : 0,

        "max_retries" : 3,

        "max_retries_wait" : "30s",

        "locale" : Locale.getDefault().toLanguageTag(),

        "timezone" : TimeZone.getDefault(),

        "index_settings" : null,

        "type_mapping" : null,

        "maxbulkactions" : 1000,

        "maxconcurrentbulkactions" : 4 * available CPU cores,

    }

}'


등록방법에는 원문에 나와 있는 default value 들을 보기 위해 몽땅 다 넣어 두었습니다.
그렇기 때문에 이건 목적에 맞게 수정해서 사용하시기 바랍니다.

[River 등록 - fetch/update]
curl -XPUT 'localhost:9200/_river/jdbc_mysql_fetch/_meta' -d '{

    "type" : "jdbc",

    "jdbc" : {

        "url" : "jdbc:mysql://localhost:3306/test",

        "user" : "root",

        "password" : "",

        "sql" : [

        {

        "statement" : "SELECT item_id, item_code, item_name, price, regdate FROM TBL_ITEM_INCREMENT WHERE fetch_flag = ?",

        "parameter" : ["F"],

        "callable" : false

        },

        {

        "statement" : "UPDATE TBL_ITEM_INCREMENT SET fetch_flag = ? WHERE ts < NOW() - ? ANd fetch_flag = ?",

        "parameter" : ["T", 180, "F"],

        "callable" : false

         }

        ],

        "index" : "river_jdbc_mysql",

        "type" : "tbl_item_increment",

        "schedule" : "0 * * ? * *",

        "maxconcurrentbulkactions" : 32

    }

}'


저는 테스트로 색인해야할 데이터를 fetch  하는 쿼리와 색인 작업이 완료된 데이터를 다시 fetch해 오지 않도록 flag 를 update 하는 쿼리를 두 개 등록해서 테스트 하였습니다.

[느낀점]
- 음... 대용량 데이터에 대한 처리 시 과연 요구하는 성능이 나올까????
- 그냥 특성에 맞는 서비스에 적용하면 아주 편리 할 것 같기는 하다.

[테스트 환경]
- elasticsearch 1.2.1 : standalone, cluster
- elasticsearch-river-jdbc 1.2.1.1
- mysql 5.6.11
- mysql connector 5.1.31


: