Data Engineering
-
Opensearch의 인덱싱은 검색 효율을 높이기 위해 데이터를 구조화하는 방법이다. 이번에는 이 방법에 대해 자세히 알아보려고 한다. Inverted Index OpenSearch의 빠른 검색 성능은 역인덱스로부터 나온다. 역인덱스의 목적은 효율적이고 빠른 전문 검색이 가능하게 하는 것이다. 전문 검색은 특정 단어가 포함된 문서를 찾아내는 검색 방식을 말한다. 기존 RDBMS에서는 전문 검색을 하면 레코드 하나하나씩 테이블 전체를 풀스캔하기에 속도가 느리다. OpenSearch는 토큰화된 역인덱스 데이터에 대해 쿼리를 진행하기에 빠르다. 역인덱스는 필드 수준에서 작동하기에 각 Text 타입 필드마다 하나씩 가지고 있다. 위 그림은 도큐먼트를 추가할 때 character filter -> tokenize..
[OpenSearch] - 3. Inverted Index ( 역인덱스 )Opensearch의 인덱싱은 검색 효율을 높이기 위해 데이터를 구조화하는 방법이다. 이번에는 이 방법에 대해 자세히 알아보려고 한다. Inverted Index OpenSearch의 빠른 검색 성능은 역인덱스로부터 나온다. 역인덱스의 목적은 효율적이고 빠른 전문 검색이 가능하게 하는 것이다. 전문 검색은 특정 단어가 포함된 문서를 찾아내는 검색 방식을 말한다. 기존 RDBMS에서는 전문 검색을 하면 레코드 하나하나씩 테이블 전체를 풀스캔하기에 속도가 느리다. OpenSearch는 토큰화된 역인덱스 데이터에 대해 쿼리를 진행하기에 빠르다. 역인덱스는 필드 수준에서 작동하기에 각 Text 타입 필드마다 하나씩 가지고 있다. 위 그림은 도큐먼트를 추가할 때 character filter -> tokenize..
2024.01.06 -
opensearch의 핵심이라고도 할 수 있는 인덱싱과 검색에 대해 알아보려고 한다. Text vs Keyword 이 둘의 차이는 분석과정의 유무이다. text는 추가나 업데이트가 될 때마다 분석 과정을 거친 후 반영된다. 하지만 keyword는 따로 분석 과정 없이 텍스트 그대로 반영된다. Text Analysis Opensearch의 텍스트가 거치는 텍스트 분석은 분석기에 의해 수행된다. 이 분석기는 3가지 요소로 구성된다. Character filter 입력 받은 text에서 미리 설정한 룰에 따라 문자를 추가, 제거, 변경한다. 예) html 파일 내의 태그 제거 Tokenizer 텍스트를 토큰으로 자른다. 이때 어떤 기준으로 자를지를 토크나이저 종류에 따라 선택할 수 있다. Standard 토크..
[OpenSearch] - 2. 텍스트 분석opensearch의 핵심이라고도 할 수 있는 인덱싱과 검색에 대해 알아보려고 한다. Text vs Keyword 이 둘의 차이는 분석과정의 유무이다. text는 추가나 업데이트가 될 때마다 분석 과정을 거친 후 반영된다. 하지만 keyword는 따로 분석 과정 없이 텍스트 그대로 반영된다. Text Analysis Opensearch의 텍스트가 거치는 텍스트 분석은 분석기에 의해 수행된다. 이 분석기는 3가지 요소로 구성된다. Character filter 입력 받은 text에서 미리 설정한 룰에 따라 문자를 추가, 제거, 변경한다. 예) html 파일 내의 태그 제거 Tokenizer 텍스트를 토큰으로 자른다. 이때 어떤 기준으로 자를지를 토크나이저 종류에 따라 선택할 수 있다. Standard 토크..
2024.01.06 -
OpenSearch 구성 요소 opensearch는 RDBMS와 사용하는 용어가 다르다. 테이블 -> 인덱스 레코드 -> 도큐먼트 컬럼 -> 필드 스키마 -> 매핑 인덱스란 말이 어색할 수도 있는데, RDBMS에서 인덱스는 보통 빠른 검색을 위해 유니크한 값을 주는 것이었다면, 여기서는 테이블과 같은 데이터들이 모여있는 것을 말하며 인덱싱은 검색 엔진에서 빠른 검색을 위해 데이터를 구조화하는 방법을 말한다. 그래서 데이터가 들어오면 인덱싱을 한 후에 인덱스에 저장된다. 그리고 이 인덱싱 전에 매핑이 일어난다. 매핑 정의에 따라 입력받은 도큐먼트를 OpenSearch가 이해할 수 있는 데이터 구조로 변환하는 과정이다. 어떤 타입들이 있는지는 공식문서에서 확인 가능하다. https://opensearch.o..
[OpenSearch] - 1. OpenSearch 구조와 동작방식 알아보기 & CRUD 등 여러 동작 실습하기OpenSearch 구성 요소 opensearch는 RDBMS와 사용하는 용어가 다르다. 테이블 -> 인덱스 레코드 -> 도큐먼트 컬럼 -> 필드 스키마 -> 매핑 인덱스란 말이 어색할 수도 있는데, RDBMS에서 인덱스는 보통 빠른 검색을 위해 유니크한 값을 주는 것이었다면, 여기서는 테이블과 같은 데이터들이 모여있는 것을 말하며 인덱싱은 검색 엔진에서 빠른 검색을 위해 데이터를 구조화하는 방법을 말한다. 그래서 데이터가 들어오면 인덱싱을 한 후에 인덱스에 저장된다. 그리고 이 인덱싱 전에 매핑이 일어난다. 매핑 정의에 따라 입력받은 도큐먼트를 OpenSearch가 이해할 수 있는 데이터 구조로 변환하는 과정이다. 어떤 타입들이 있는지는 공식문서에서 확인 가능하다. https://opensearch.o..
2024.01.04 -
Zookeeper Cli zookeeper 폴더 안 bin폴더를 찾아 아래 명령어로 우선 cli 실행한다. ./bin/zkCli.sh -server $host:$clientPort 우선 간단한 실습을 위해 로컬호스트로 띄웠다. Create Get Set ( Update) Delete Watch -m 로 level을 조정할 수 있다. persistent는 해당 노드 자신만, persistent_recursive는 해당 노드 + 자식 노드까지 알려준다. Java API Setting 우선 zookeeper 연결을 위해 build.gradle에 depedency를 추가한다. dependencies { implementation 'org.apache.zookeeper:zookeeper:3.7.2' } 클래스를 ..
Zookeeper Cli & java API 사용하기Zookeeper Cli zookeeper 폴더 안 bin폴더를 찾아 아래 명령어로 우선 cli 실행한다. ./bin/zkCli.sh -server $host:$clientPort 우선 간단한 실습을 위해 로컬호스트로 띄웠다. Create Get Set ( Update) Delete Watch -m 로 level을 조정할 수 있다. persistent는 해당 노드 자신만, persistent_recursive는 해당 노드 + 자식 노드까지 알려준다. Java API Setting 우선 zookeeper 연결을 위해 build.gradle에 depedency를 추가한다. dependencies { implementation 'org.apache.zookeeper:zookeeper:3.7.2' } 클래스를 ..
2024.01.04 -
Zookeeper의 여러 기능들 Data model zookeeper는 파일 시스템처럼 '/'로 구분하여 경로를 표기하고 데이터를 저장한다. zookeeper는 중간 경로 예를들면 위의 이미지에서 app1이나 app2, root 도 데이터를 가질 수 있다. 그리고 자식 노드들의 데이터도 접근 가능하다. 그렇기에 수bytes ~ KB 이하로 유지하는 것이 좋다. 보통은 설정 정보나, 작은 메타데이터 정보 등의 빠른 동기화 용도 위주로 사용된다. Versioning Znode는 데이터나 ACL 변경할 때 versioning이 되며, version number를 갖고있다 client에게 응답할 때 이 버전 번호도 항상 같이 전달한다. ACL은 엑세스 제어 목록으로 read할 때는 연결된 모든 데이터를 가져오고..
Zookeeper 여러 기능 알아보기 및 설치Zookeeper의 여러 기능들 Data model zookeeper는 파일 시스템처럼 '/'로 구분하여 경로를 표기하고 데이터를 저장한다. zookeeper는 중간 경로 예를들면 위의 이미지에서 app1이나 app2, root 도 데이터를 가질 수 있다. 그리고 자식 노드들의 데이터도 접근 가능하다. 그렇기에 수bytes ~ KB 이하로 유지하는 것이 좋다. 보통은 설정 정보나, 작은 메타데이터 정보 등의 빠른 동기화 용도 위주로 사용된다. Versioning Znode는 데이터나 ACL 변경할 때 versioning이 되며, version number를 갖고있다 client에게 응답할 때 이 버전 번호도 항상 같이 전달한다. ACL은 엑세스 제어 목록으로 read할 때는 연결된 모든 데이터를 가져오고..
2024.01.04 -
Zookeeper 란 분산 어플리케이션을 위한 분산 코디네이션 서비스이다. 분산 어플리케이션을 만들기 위해서 필요한 동기화나 설정 등 다양한 기능의 API 제공해준다. 그리고 무엇보다 높은 수준의 구현이 필요한 coordination 기능을 제공해줘서 더 쉽게 분산 어플리케이션을 구현할 수 있다. Zookeeper 주요 기능 & 특징 ZNodes 주키퍼는 shared hierachical namespace를 통해 분산 프로세스가 서로 상호작용한다. 이 namespace는 znodes라고 불리는 데이터 레지스터로 구성되어 있다. 이 znode로 메모리에서 데이터를 처리하기 때문에 높은 throughput과 낮은 latency를 제공한다. 높은 performance 높은 available strcitly o..
Zookeeper 소개와 작동 프로세스Zookeeper 란 분산 어플리케이션을 위한 분산 코디네이션 서비스이다. 분산 어플리케이션을 만들기 위해서 필요한 동기화나 설정 등 다양한 기능의 API 제공해준다. 그리고 무엇보다 높은 수준의 구현이 필요한 coordination 기능을 제공해줘서 더 쉽게 분산 어플리케이션을 구현할 수 있다. Zookeeper 주요 기능 & 특징 ZNodes 주키퍼는 shared hierachical namespace를 통해 분산 프로세스가 서로 상호작용한다. 이 namespace는 znodes라고 불리는 데이터 레지스터로 구성되어 있다. 이 znode로 메모리에서 데이터를 처리하기 때문에 높은 throughput과 낮은 latency를 제공한다. 높은 performance 높은 available strcitly o..
2024.01.03 -
분산 시스템 개요 데이터 엔지니어링하면 분산 시스템은 항상 나오는 주제이다. 그만큼 많은 소프트웨어에서 분산 시스템이 필요하다는 것인데, 그렇다면 분산 시스템이 필요한 이유는 무엇일까? 그것은 하드웨어 성능의 발전 속도로부터 나온다. '무어의 법칙'은 하드웨어 성능의 발전은 선형적이라는 것이다. 하지만 컴퓨터에서의 트래픽과 데이터는 기하 급수적으로 늘어났다. 이에 하드웨어를 scale-up이 아닌 scale-out 전략을 생각하게 된다. 상태를 공유하지 않으면 scale out이 쉽게 가능했지만 Database가 중요해지면서 대량의 데이터가 공유 가능해야했다. 따라서 Database를 중심으로 상태와 데이터가 공유 가능하면서 scale-out하여 많은 데이터와 트래픽이 처리 가능한 소프트웨어가 필요해졌다..
분산 시스템 이해하기 - BASE 원칙, CAP, PACELC분산 시스템 개요 데이터 엔지니어링하면 분산 시스템은 항상 나오는 주제이다. 그만큼 많은 소프트웨어에서 분산 시스템이 필요하다는 것인데, 그렇다면 분산 시스템이 필요한 이유는 무엇일까? 그것은 하드웨어 성능의 발전 속도로부터 나온다. '무어의 법칙'은 하드웨어 성능의 발전은 선형적이라는 것이다. 하지만 컴퓨터에서의 트래픽과 데이터는 기하 급수적으로 늘어났다. 이에 하드웨어를 scale-up이 아닌 scale-out 전략을 생각하게 된다. 상태를 공유하지 않으면 scale out이 쉽게 가능했지만 Database가 중요해지면서 대량의 데이터가 공유 가능해야했다. 따라서 Database를 중심으로 상태와 데이터가 공유 가능하면서 scale-out하여 많은 데이터와 트래픽이 처리 가능한 소프트웨어가 필요해졌다..
2024.01.03 -
이전에는 node의 모니터링을 했다면 이번에는 자신이 만든 앱의 모니터링을 해보았다. 아래와 같은 구조로 진행해볼 예정이다. App은 Spring boot로 매우 간단하게 만들었으며, Prometheus Simple Client java로 Prometheus 형식의 메트릭을 노출한다. 여기서 Prometheus Simple Client란 Prometheus는 각 언어별로 client library를 제공한다. Prometheus 포맷으로 노출할 수 있는 설정, 각 언어별로 기본 모니터링 시스템을 이용해 메트릭 정보를 추출, custom metric을 남기는 기능 등을 할 수 있다. 한마디로 Prometheus가 알아들을 수 있도록 데이터를 남길 수 있도록 해주는 라이브러리이다. Java App 생성 우선..
[Observability] - 5. 자신의 Application Monitoring 해보기!!이전에는 node의 모니터링을 했다면 이번에는 자신이 만든 앱의 모니터링을 해보았다. 아래와 같은 구조로 진행해볼 예정이다. App은 Spring boot로 매우 간단하게 만들었으며, Prometheus Simple Client java로 Prometheus 형식의 메트릭을 노출한다. 여기서 Prometheus Simple Client란 Prometheus는 각 언어별로 client library를 제공한다. Prometheus 포맷으로 노출할 수 있는 설정, 각 언어별로 기본 모니터링 시스템을 이용해 메트릭 정보를 추출, custom metric을 남기는 기능 등을 할 수 있다. 한마디로 Prometheus가 알아들을 수 있도록 데이터를 남길 수 있도록 해주는 라이브러리이다. Java App 생성 우선..
2024.01.01