본문 바로가기

Database

(56)
2. elasticsearch indexing Indexing 이란 문서(DOC)들의 내용 중에서 검색하고자 하는 대상들을 쉽고 빠르게 찾을 수 있는 자료구조로 배치하는 것.전통적인 RDBMS 에서는 like 검색을 사용하기 때문에 데이터가 늘어날수록 검색해야 할 대상이 늘어나 시간도 오래 걸리고, row 안의 내용을 모두 읽어야 하기 때문에 기본적으로 속도가 느림.Elasticsearch는 데이터를 저장할 때 역색인(inverted index) 구조를 만들어 저장하여 관리  Elasticsearch에서는 추출된 각 키워드를 텀(term) 이라고 부르며 이렇게 Inverted Index가 있으면 term을 포함하고 있는 Documents의id를 바로 얻어올 수 있다.이러한 특성 떄문에 Elasticsearch에서는 저장이 아닌 색인(Indexing)..
1. Elasticsearch Elasticsearch는 Apache Lucene 기반의 분산형 검색 및 분석 엔진, 확장 가능한 데이터 베이스 사용 가능한 예로그, 메트릭 추적 : 애플리케이션, 시스템 및 서비스의 로그를 수집 저장 및 분석애플리케이션 성능 모니터링 : 애플리케이션의 성능 모니터링 분석사용자 모니터링 : 애플리케이션과 사용자 상호 작용을 모니터링 , 정량화, 분석풀 텍스트 검색 : 역색인, 토큰화, 텍스트 분석을 활용하여 빠르고 관련현 있는 텍스트 검색시멘틱 검색 : 동의어, 벡터 임베딩을 활용한 맥락적 의미 이해지리 공간 검색 2. docker 실행https://www.elastic.co/guide/en/elasticsearch/reference/8.15/run-elasticsearch-locally.html Ru..
Apache Lucene 4 http://opensearchlab.otago.ac.nz/paper_10.pdf 해당 페이퍼는 es를 간단하게 훓는 페이퍼로 대략적인 개요정도만 담겨져 있었다.  Apache Lucene은 색인, 쿼리, 하이라이트, 언어 분석 등과 같은 일반적인 검색 및 검색 관련 작업을 수행하기 위한 애플리케이션 프로그래밍 인터페이스를 제공하는 오픈 소스 Java 기반 검색 라이브러리입니다.Language AnalysisLucene의 분석 기능은 색인할 문서나 검색할 쿼리 형태의 콘텐츠를 가져와 필요에 따라 사용할 수 있는 적절한 내부 표현으로 변환한다.Lucene의 역 인덱스에 삽입되는 토큰을 생성하고, 쿼리 시에는 적절한 쿼리 표현을 형성하는 데 도움이 되는 토큰으로 변환한다.분석 프로세스는 들어오는 콘텐츠에 대..
디비 개선 작업 + cluster 사건의 발단.DB CPU가 100%에서 내려오질 않는다. (심지어 락 걸린것도 아님)로그 테이블을 조회하는 쿼리였는데, 요 몇일 사용자가 늘어서 그런지 집계할때에 자원을 계속 소모해서 하루종일 알림이 울렸다.. 일단 쿼리 explain 실행 계획을 데이터를 살펴보았는데 특별히 나쁜 점은 없지만 인덱스를 잘못타고 있었고, 정렬이 필요한 쿼리에서 bitmap scan을 통해 읽은 다음 다시 재정렬하는 과정을 거치고 있었다.(메모리 낭비- work_mem를 잡아먹는 쿼리가 된다.) 일단 급한 CPU사용량은 쿼리 수정과 함께 인덱스를 추가해서 일단락되었지만, 앞으로도 데이터가 계속 쌓이는 로그 테이블이여서 bitmap csan을 seq scan으로 바꾸고 싶었다. -> Nested Loop (cost=22..
postgresql 한글 order by의 기준 select * from store order by store_nm; sql로 분명히 한글 정렬했는데, 이상하게 정렬이 되어버렸다. 보는 바와 같이 위쪽은 가나다순으로 잘 나오다가 자릿수가 더 많은 stirng에서 다시 내림차순으로 정렬이 되고 있었다. postgre에서는 정렬이 어떤 기준으로 되는걸까? PostgreSQL 시스템 카탈로그는 PostgreSQL의 관리 시스템이 사용하는 테이블에서 데이터베이스 및 테이블 등의 정보를 다음의 칼럼으로 관리한다. 위의 칼럼중 우리가 볼 칼럼은 datcollate이다. 다음의 쿼리를 실행하면 데이터베이스 마다 설정된 값을 볼수 있다. select datname, datdba, encoding, datcollate, datctype from pg_database;..
postgresql SQL Error [42P10]: ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification 문제점 다음과 같이 insert on conflict 구문일때 실행시 에러가 발생했다. INSERT INTO frame (id, chnl_id, frame_body_cntt, create_at, updated_at) VALUES ('A0016','A','오렌지', now(), now()) ON CONFLICT (id) DO nothing; 해결책 공식문서를 보자!! https://www.postgresql.org/docs/current/sql-insert.html INSERT INSERT INSERT — create new rows in a table Synopsis [ WITH [ RECURSIVE ] with_query [, ...] ] INSERT … www.postgresql.org on conf..
파티셔닝 실습 - postgresql 1) 선언적 파티션 선언적 파티션 구성 실습은 postgres 10.X 이상에서만 가능하다. 9.* 버전의 경우 테이블 파티션 명령어가 없기 때문에 2) Partitioning Using Inheritance(하단 참조)를 사용해야 한다. select version(); 1. 파티션 테이블 생성 대형 아이스크림 회사를 위한 데이터베이스를 구축한다고 가정합니다. 이 회사는 매일 최고 기온과 각 지역의 아이스크림 판매량을 저장할 테이블을 다음과 같이 예정이다. 1 2 3 4 5 6 CREATE TABLE measurement ( city_id int not null, -- 도시 id logdate date not null, -- 날짜 peaktemp int, -- 최고 온도 unitsales int -- 판..
파티션 개념 DB 운영 방식 한대의 DB 서버에서 운영한다. 이중화 : 한대의 서버만 운영하니까 불안해, DB 서버가 죽으면 서비스가 되지 않으니까 DB 서버를 두대로 만들자. 레플리카 : 서버 두대로도 부족한 거 같아. 한대가 죽으면, 한대로 운영하는 동안 백업을 할 수가 없어 레플리카는 기본적으로 서버 4대가 한 묶음이다. 파티션 : 하나의 테이블에 너무 많은 데이터가 있어서 느려졌어, 관리도 힘들어, 테이블을 나누지만 하나의 테이블처럼 사용하자 샤딩 : 하나의 디비에 너무 많은 데이터가 있어서 느려졌어, 파티션으론 한계가 있으니, 디비를 복사해서 하나의 디비처럼 사용하자 proxySQL : 서버 여러대를 하나의 서버처럼 사용하고 싶어 파티션 데이터를 별도의 테이블로 분리해서 저장하지만 사용자 입장에서는 여전히 ..