전체 글 194

역색인 (Inverted Index)

역색인 (Inverted Index)낱말이나 숫자와 같은 내용물로부터 매핑정보를 데이터베이스 파일의 특정 지점이나 문서또는 문서 집합 안에 저장하는 색인 데이터의 구조문서 검색 시스템에서 쓰이는 가장 대중적인 데이터 구조. 대규모의 데이터에서 사용이 되다.두 가지 주된 종류가 있다 레코드 단위의 inverted index, Word 단위의 Inverted Index검색 시스템에서 본문을 LIKE로 Full Scan 하는 방식도 있지만 매우 비효율적인 방식 Lucene에서의 inverted index단어 (Term)으로 인덱싱하는 Inverted Index 방식content를 LIKE 방식으로 검색하기에는 효율적이기 않기 때문에 Term으로 나누고 Term에 해당하는 Document Id를 인덱스를 만든다..

Database 2018.08.27

Lucene Segment

Lucene Segment루씬 세그먼트 Inverted Index, Doc Value, 원본 문서 등을 저장하고 있는 단위 파일Inverted Index?RDBMS를 데이터를 테이블형태로 저장한다id: 1, value : name검색엔진에서는 inverted index라는 구조로 저장token: name, doc id : 1, 2Invertered Index를 하나의 거대한 파일이 아니라 여러개의 작은 파일 단위로 저장입벽 버퍼가 가득차거나, 1초마다 하나씩 생성한번 생성된 세그먼트는 변경이 되지 않는다.문서 변경/삭제 과정update는 존재하지 않음, delete & insert삭제는 삭제되었다는 표시만 하고 검색에서 제외세그먼트 병합 과정에서 삭제된 문서를 빼고 나머지 문서들을 모아 새로운 새그먼트를..

B tree, B+ tree

B Tree데이베이스, 파일 시스템에서 널리 사용되는 트리 자료구조의 일종트리구조? 그래프의 일종, 여러 노드가 한 노드를 가리킬 수 없는 구조이다. 간단하게는 회로가 없고, 서로 다른 두 노드를 잇는 길 하나뿐인 그래프를 트리라고 한다.이진 트리를 확장, 하나의 노드가 가질수 있는 자식 노드의 최대 숫자 2보다 큰 트리 구조방대한 양의 저장된 자료를 검색해야 하는 경우 검색어와 자료를 일일이 비교하는 방식은 비효적이기 때문에 B 트리는 잘를 정렬된 상태로 보관하고 삽입 및 삭제를 대수 시간으로 할수 있다. B+ tree Quaternary Tree라고 알려져 있음키에 의해 각각 식별되는 레코드의 효율적인 삽입, 검색과 삭제를 통해 정렬된 데이터를 표현하기 위한 트리자료구조의 일종각각의 인덱스 세그먼트 ..

Programing 2018.08.25

Akka Cluster Seed Node

Akka Cluster Seed Nodeakka cluster로 join하기 위한 node, akka cluster node 중에 아무 노드의 주소를 사용하면 akka cluster에 join을 할수 있다.akka cluster의 진입점이라고 생각을 하면 된다.akka seed node로 사용하는 node가 모두 running 상태일 필요는 없다.seed node 중 첫번쨰 seed node가 중요하다. Akka Cluster가 처음 시작될때에는 첫번째 seed node는 작동되고 있는 (started) node의 주소로 할당을 한다. 시작하는 Node와 첫번째 seed node가 같을 경우 Akka Cluster가 새롭게 생긴다.cluster가 분리되는 현상이 나타날수 있기 때문에 seed node를 ..

Programing/Akka 2018.08.25

Spring JDBC

Spring JDBCSQL를 쉽게 날릴수 있도록 만들어진 libraryRowMapper 인터페이스를 통해 데이터맵핑을 할수 있다.JdbcTemplate, NamedParameterTemplateDatasource가 필요하다.Spring Data Jpa 등의 ORM을 사용할때, DB의 Index Hints 기능을 활용하지 못하는데 Spring JDBC를 직접 Native Query를 작성함으로써 해결을 할수있다.JdbcTemplateint rowCount = this.jdbcTemplate.queryForObject("select count(*) from t_actor", Integer.class); int countOfActorsNamedJoe = this.jdbcTemplate.queryForObjec..

Akka Scheduler

Akka SchedulerAkka Scheduler, 일정 시간 이후 작업을 작동시킨다.Scheduler의 정확도를 높히기 위해서는 application.conf 설정파일의 `akka.scheduler.tick-duration`를 수정해야된다.긴 시간 (long term) Scheduler로서는 부적절하기 때문에 akka-quartz-scheduler 사용하는 것이 좋다.주기적인 메시지나 싱글 메시지를 위한거면 scheduler 사용하는 것 대신 Actor Timer의 사용을 추천한다.Send to Actorsystem.scheduler().scheduleOnce(Duration.ofMillis(50), testActor, "foo", system.dispatcher(), null);Runnablesys..

Programing/Akka 2018.08.21

CQRS (Command Query Read Segregation)

CQRS (Command Query Read Segregation)데이터를 업데이트하는 작업과 데이터를 읽는 작업을 분리를 하는 패턴이다.Microsoft에서 CQRS 내용을 정리한 글이다. 기존 시스템 (CRUD)의 문제점여러 작업자가 동일한 데이터 집합을 동시에 사용하는 공동 작업 도메인의 데이터 저장소에 레코드가 잠겨 있는 경우 데이터 경합을 초래할 위험이 있다낙관적 잠금을 사용하는 경우 동시 업데이트로 인해 업데이트 충돌이 발생할 수 있습니다.시스템의 복잡성과 처리량이 늘어날수록 증가합니다.기존의 접근 방식은 데이터 저장소와 데이터 액세스 계층에 가해지는 부하뿐 아니라 정보를 검색하는 데 필요한 쿼리의 복잡성으로 인해 성능에 좋지 않은 영향을 미칠 수 있습니다.작업의 일부로 필요하지 않더라도 정확..

아키텍처 2018.08.20

Reactive Programming

Reactive Programming정의Reactive programming is programming with asynchronous data streams. You can listen to that stream and react accordinglyReactive Programming에서는 데이터의 모든 것을 스트림(Stream)으로 본다. 데이터 처리 스트림을 비동기적으로 처리하는 프로그래밍 리액티브 프로그래밍이라고 한다 (Reactive Programming)Observable (observer 할수 있는 객체 Observable), Observer (Observable에 subscribe 하는 객체)Subscriber에서는 `onNext` `onCompleted` `onError` 를 구현하는 ..

Programing 2018.08.19