본문 바로가기

Programming

Elasticsearch 에 JSON 데이터 저장할 때 유의사항 ES (Elasticsearch) 에 JSON 데이터를 저장할 때 알아 두어야 할 사항이 있는데,기본적으로 ES 는 JSON 타입의 데이터를 저장하면, 모든 field 들에 대해서 index 를 생성하려고 시도한다. 보통 JSON 데이터는 key: value 형식의 데이터들의 나열인데, 여기서 key 의 이름이 변하게 되면, ES 에서 과도하게 index 를 만드는 현상이 발생하여, 성능에 아주 좋지 않은 영향을 미치게 된다. 예를 들면 아래와 같이, key 의 이름이 star, foo 등등으로 계속 바뀌게 되면, 과도한 index 생성을 하게 된다.data1{ star: "abc"} data2{ foo: "def"} 그래서 ES 에 JSON 데이터를 저장할 때, key 의 이름이 바뀌지 않도록 데이터 .. 더보기
kafka topic 삭제시 유의사항 apache kafka 를 사용하면서 topic 을 삭제해야 할 경우가 있다. topic 삭제는 0.8.x 부터 지원이 되는 기능인데, topic 삭제를 정상적으로 진행 하기 위해서는 $KAFKA_HOME/config/server.properties 파일에 아래와 같은 내용을 추가 해야 한다.delete.topic.enable = true 이 설정을 추가하지 않은 상태에서 topic 을 삭제하게 되면, 해당 topic 은 삭제 상태로 남게 되고, 해당 topic 으로 들어온 어떠한 메시지도 처리가 되지 않는 현상이 발생한다. ./kafka-topics.sh --list --zookeeper "localhost:2181"topic1topic2 - marked for deletion 해당 설정 값을 바꾼 후.. 더보기
MySQL 에서 접속한 host 의 정보와 connection 개수를 나타내기 DB 와 관련된 프로그램을 작성하다가 가끔 마주치게 되는 문제가 있는데, 허용 가능한 최대 MySQL connection 개수를 초과했다는 오류 메시지이다. 이러할때는 MySQL 에 접속하여 어떤 호스트가 접속을 얼마나 하는 지 알아볼 필요가 있는데, 이를 위해서 아래와 같은 query 로 조회하면 간단하게 확인해 볼 수 있다. select host_info.host_name host_name, count(host_info.host_name) connection_count from (select SUBSTRING_INDEX(process_info.host, ':', 1) host_name from (select host from information_schema.processlist) as process.. 더보기
slick 3.x 의 connection 개수 조정하기 Scala 관련 프로젝트를 진행하다가 RDB (Relational Database) 작업을 하기 위해서 Slick 을 많이 사용하는데,Slick 의 connection pooling 기능을 설정하는 방법에 대해서 간단하게 소개하고자 한다. DBCP 와 같은 third-party library 를 사용하는 것도 가능하지만, Slick 3.x 부터는 기본으로 HikariCP 를 사용하도록 변경 되었다. 아래 URL 에서 관련 문서를 살펴보면Slick 의 Database 관련설정 load 아래의 항목을 볼 수 있다.maxConnections (Int, optional, default: numThreads * 5): The maximum number of connections in the pool. 이 변수로 .. 더보기
collection 에서 lazy 방식의 view 를 생성하는 방법 scala 에서는 java 와 마찬가지로 collection 을 생성함과 동시에 메모리에 모든 element 를 올릴 수 있는 방법을 제공한다. 아래의 코드는 바로 그 방법scala> 1 to 10res1: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 아래의 코드는 lazy 방식의 view 를 생성scala> (1 to 10).viewres2: scala.collection.SeqView[Int,scala.collection.immutable.IndexedSeq[Int]] = SeqView(...) 그러므로 Collection type 의 view method 를 호출하게 되면 eager 방식(실행과 동.. 더보기
scala sbt 에서 git branch 표시하기 어떤 개발자가 자신의 sbt console 에 git branch 를 표시하는 방법을 연구해서 공개했다. 아래 링크에서 확인할 수 있다.http://www.whiteboardcoder.com/2016/03/sbt-customize-shell-prompt-with-git.html 아래 그림은 내 sbt console 에 적용된 모습니다.이쁘게 잘 나온다. 더보기
Merging sequence of Futures of Lists into one Future containing merged list Scala 에서 Future list 를 하나의 Future 로 merge 하는 방법을 소개한다.아래 gist 코드를 보면 예제가 잘 나와있다. 아래와 같이 interpreter 에서 실행해보면 원하는 결과를 얻을 수 있음을 확인할 수 있다.원래는 List[Future[List[Int]]] 이었던 것이 Future[List[Int]] 로 되는 것이다. 간단하게 예를 들면, List(Future(List(1,2)), Future(List(3,4)), Future(List(5,6))) 이Future(List(1,2,3,4,5,6)) 으로 병합된다. 더보기
HBase ACID Reference HBASE 에서 제공하는 ACID 개념과 특징 들에 대해서 설명한다. Atomicity - 하나의 operation 은 전부 성공 혹은 전부 실패이다.Consistency - 모든 action 들은 테이블의 상태가 하나의 유효한 상태에서 다른 상태로 변하게 한다.Isolation - 하나의 operation 은 동시에 실행되는 transaction 들과는 완벽히 독립적으로 수행된다.Durability - update 가 성공했으면, 이 update 는 유실되지 않는다.Visibility - 업데이트에 수반된 read operation 은 update 되는 것을 볼 수 있다.HBASE 에서 보장하는 ACID Atomicity하나의 row 에 행해지는 변경사항은 모두 성공 혹은 실패로 끝이 난다.하나의 ro.. 더보기
docker 를 사용하여 apache hbase 를 pseudo-distributed 로 설치하기 docker 를 사용하면 아주 간단하게 hbase 설치된 이미지를 바로 나의 컴퓨터 혹은 다른 서버에서 실행할 수 있다. 아래 링크로 가보면 이미지를 실행하는 법이 나와 있다.https://hub.docker.com/r/nerdammer/hbase/ 아래의 명령어로 docker 이미지를 다운받고docker pull nerdammer/hbase 호스트명을 hbase 로 사용하고 싶다면,/etc/hosts 파일에 아래와 같이 수정하면 된다.192.168.xxx.xxx hbase 아래의 명령어로 hbase 이미지를 실행시키면 된다.docker run -p 2181:2181 -p 60010:60010 -p 60000:60000 -p 60020:60020 -p 60030:60030 -h hbase nerdamme.. 더보기
scala 공부 자료 Scala 언어를 공부 하려는 사람에게 도움이 될 거 같아서 공유 합니다. 예전 사내에서 세미나를 진행 했던 자료라서 내용이 자세하지 않을 수 있습니다. Scala study, tutorial materialsgit@github.com:starblood/scala_tutorial.gitScala 설정maven 설정 - https://github.com/starblood/scala-maven-archetype 추천 온라인 강의Functional Programming Principles in Scala - https://www.coursera.org/course/progfunPrinciples of Reactive Programming - https://www.coursera.org/course/reacti.. 더보기