'JDBC'에 해당되는 글 6건

  1. 2014.11.13 [Elasticsearch] JDBC River 추가 REST API 팁!!
  2. 2014.11.12 JDBC River의 strategy 란?
  3. 2014.07.07 [Java] Custom JDBC Driver mybatis 연동 시 주의사항.
  4. 2014.07.02 [Java] JDBC Driver 만들기 참고
  5. 2014.06.13 [Elasticsearch] JDBC River 알아보기.
  6. 2012.03.14 jdbc driver... log4jdbc

[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 작업을 수행 하는 것 입니다.


:

[Java] Custom JDBC Driver mybatis 연동 시 주의사항.

ITWeb/개발일반 2014. 7. 7. 18:29

주의사항이라고 까지 할건 없지만.

제가 경험한 내용을 공유 차원에서 올려 봅니다.


처음에 elasticsearch 용 jdbc driver 를 만들고 나서 그냥 생으로..


[java.sql.* 로 코딩]

Connection conn = null;

EsStatement stmt = null;


Class.forName("com.gruter.elasticsearch.jdbc.EsDriver");

conn = DriverManager.getConnection("jdbc:es://localhost:9300/henry?......", ".....", ".....");

stmt = (EsStatement) conn.createStatement();


String sql = "select * from transactions where buyer_id='henry' and item_category in ('1A', '8A')  and price > 20000 order by reg_dt desc limit 0, 20";

ResultSet rs = stmt.executeQuery(sql);


while (rs.next()) {

    int tx_id = rs.getInt("tx_id");

    String buyer_id = rs.getString("buyer_id");

    System.out.println("tx_id : " + tx_id + ", buyer_id : " + buyer_id);

}


rs.close();

stmt.close();

conn.close();


이렇게 하면 잘 됩니다.

근데 mybatis를 이용해서 하니까 에러가 발생을 하더라구요.

에러를 확인해보니.. 제가 jdbc driver 를 덜 구현해 줬더라구요.

위에 처럼 할 경우 ResultSetMetaData 구현을 안해도 동작 하는데 문제가 없는데 mybatis 랑 쓸려면 구현을 꼭 해주셔야 합니다.


참고하세요 ㅎㅎ.

:

[Java] JDBC Driver 만들기 참고

ITWeb/개발일반 2014. 7. 2. 10:25

아래 URL 보고 만들면 됩니다.

http://www.oracle.com/technetwork/java/javase/jdbc/index.html

https://github.com/jprante/jdbc-csv

http://www.docjar.com/projects/MySQL-JDBC-5.1.11-code.html

http://www.javaworld.com/article/2074249/data-storage/create-your-own-type-3-jdbc-driver--part-1.html

:

[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


:

jdbc driver... log4jdbc

ITWeb/개발일반 2012. 3. 14. 12:10

흔히 많이 사용하던 mysql 용 JDBC Driver

com.mysql.jdbc.Driver


예전 부터 있었던 내용인데 그냥 회상용으로 올려봅니다.

내가 사용하는 DBMS 가 뭔지 고민하지 않고 알아서 적절한 jdbc driver 를 사용하게 해주는 아주 유용한 jdbc proxy util 이라고 하면 될 것 같습니다.

- 여기 들어가 보시면 잘 나와 있구요.

최근에 많이 쓰는건 아래와 같습니다.


[pom.xml 설정]

<dependency>

  <groupId>org.lazyluke</groupId>

  <artifactId>log4jdbc-remix</artifactId>

  <version>0.2.7</version>

</dependency>



[driverClassName]

jdbc.driverClassName=net.sf.log4jdbc.DriverSpy



뭐 늘 그렇지만 배울것도 많아 지는 것도 사실이지만 개발하는데 필요한 툴들도 많이 편리해 지고 있는 것도 사실인것 같내요. 
: