반응형

Elasticsearch란

검색 및 분석을 위한 분산형 오픈소스 데이터베이스

데이터를 index라는 구조로 저장하고, 이를 통해 빠르고 유연한 검색이 가능

 

Document : Elasticsearch에서 데이터의 최소 단위(예 : JSON 형식의 데이터)

Index : Document들이 모여있는 데이터베이스와 유사한 개념

Cluster/Node : 여러 개의 Index와 데이터를 저장하는 서버환경

 


Elasticsearch  데이터 삭제 방법

 

1. 인덱스 전체 삭제

DELETE /index_name

 

2. 조건에 맞는 Document 만 삭제

POST /index_name/_delete_by_query
{
  "query": {
    "match": {
      "field_name": "value" // field_name, value 특정 조건
    }
  }
}

3. Document ID 로 특정 데이터 삭제

DELETE /user_data/_doc/123

 

 

엘라스틱서치 데이터 삭제시 주의해야할 사항으로는

데이터 복구가 불가능하기 때문에 삭제한 중요한 데이터는 삭제 전 백업이 꼭 필요하다.

 

Elasticsearch 대량 삭제가 다른 작업에 미치는 영향

읽기

Elasticsearch는 분산형 아키텍처를 사용하기 때문에, 대량 삭제 작업이 진행되는 동안 검색 및 조회 가능하다

삭제 작업이 클러스터에 높은 부하를 줄 경우, 일부 검색 쿼리의 응답 속도가 느려질 수 있다

쓰기

삭제 작업은 노드 리소스를 소비하므로, 동시에 대량 데이터를 추가하거나 갱신하려는 작업이 진행중이면 성능 저하가 발생할 수 있다

 

_delete_by_query  사용시 데이터를 검색하고 삭제하므로 CPU와 디스크 I/O를 많이 사용

작업의 양이 많아질 경우 성능 서하가 발생할 수 있다

 

성능 저하를 최소화하는 방법

. 사용자 활동이 적은시간(업무 외 시간, 야간)에 삭제 작업을 진행

. 삭제 작업을 분할 처리

: 삭제 작업을 한번에 하지 않고 적게 나눠서 삭제한다.

. Throttling 설정

: request_per_second 값을 설정하여 삭제 제한 설정

ex) 초당 100건 삭제 제한

POST /index_name/_delete_by_query?requests_per_second=100
{
  "query": {
    "match_all": {}
  }
}

. Cluster 상태 모니터링

Kibana의 Monitoring 이나

/_cat/health

명령어를 사용해 클러스터 상태 모니터링

* 상태가 green  일 경우 클러스터가 안정적 상태라는 뜻

 


회사 업무 작업 전 정리 중.

연습삼에 로컬 컴퓨터에 환경을 구축해서 실험해볼 예정이다.

반응형
반응형

DB 테이블 리스트 조회 방법

회사에서 업무를 하다보면 테이블 조회할 일이 많은데

ERD가 문서화되어있지 않으면 일단 내가 어떤 테이블을 조회할 수 있는지 어떤 테이블이 있는지조차 몰라서

문의가 들어왔을 때

'엥...' 하고 있을 때가 있다

 

최근 새로운 시스템 업무를 조금씩 인수인계 받기 시작하면서 생소한 테이블도 조회를 하고 있는데 앞으로 내가 어떤 테이블을 다룰지 미리미리 확인을 하기 위해서 권한을 부여받은 DB의 테이블을 미리 확인해보려고 하였다.

MySQL

SHOW TABLES;

MySQL에서는 show table로 현재 선택된 데이터베이스 내의 모든 테이블 출력 가능

SHOW TABLES FROM 데이터베이스명;

특정 데이터베이스의 테이블을 조회하려면 데이터베이스 명을 입력한다

SELECT table_name 
FROM information_schema.tables
WHERE table_schema = '데이터베이스명' AND table_name LIKE '%키워드%';

특정 조건을 만족하는 테이블만 필터링 하기 위해서 infomation_schema.table 을 사용할 수있다

 

Oracle

Oracle에서는 ALL_TABLES 뷰를 통해 데이터베이스의 모든 테이블을 조회할 수 있지만

테이블을 스키마별로 관리하고 있으므로 스키마에 따라결과가 달라질 수 있다.

SELECT table_name 
FROM all_tables
WHERE owner = '스키마명';

테이블 이름으로 필터링 가능

SELECT table_name
FROM all_tables
WHERE owner = '스키마명' AND table_name LIKE '%키워드%';

Oracle에서는 ALL_TABLES, USER_TABLES, DBA_TABLES 세 가지 테이블 뷰가 있는데, 각 뷰는 다음과 같은 용도로 사용됩니다:

  • ALL_TABLES: 현재 사용자가 접근할 수 있는 모든 테이블
  • USER_TABLES: 현재 사용자에게 속한 테이블만 조회
  • DBA_TABLES: 데이터베이스 내 모든 테이블 조회 (DBA 권한 필요)
반응형
반응형

https://pypi.org/project/jaconv/

 

jaconv

Pure-Python Japanese character interconverter for Hiragana, Katakana, Hankaku, Zenkaku and more

pypi.org

다운로드

pip install jaconv

 

기능

히라가나 -> 가타카나 전환

가타카나 -> 히라가나 전환

가능하다

 

영어 -> 히라가나

히라가나 -> 영어 기능도 제공한다고 위키에는 나와 있으나,

실험해보니 해당 기능은 부족한 부분이 있는 것으로 보인다

 

import jaconv

# Hiragana to Katakana
jaconv.hira2kata('ともえまみ')
# => 'トモエマミ'

# Hiragana to half-width Katakana
jaconv.hira2hkata('ともえまみ')
# => 'トモエマミ'

# Katakana to Hiragana
jaconv.kata2hira('巴マミ')
# => '巴まみ'

# half-width character to full-width character
# default parameters are followings: kana=True, ascii=False, digit=False
jaconv.h2z('ティロ・フィナーレ')
# => 'ティロ・フィナーレ'

# half-width character to full-width character
# but only ascii characters
jaconv.h2z('abc', kana=False, ascii=True, digit=False)
# => 'abc'

# half-width character to full-width character
# but only digit characters
jaconv.h2z('123', kana=False, ascii=False, digit=True)
# => '123'

# half-width character to full-width character
# except half-width Katakana
jaconv.h2z('アabc123', kana=False, digit=True, ascii=True)
# => 'アabc123'

# an alias of h2z
jaconv.hankaku2zenkaku('ティロ・フィナーレabc123')
# => 'ティロ・フィナーレabc123'

# full-width character to half-width character
# default parameters are followings: kana=True, ascii=False, digit=False
jaconv.z2h('ティロ・フィナーレ')
# => 'ティロ・フィナーレ'

# full-width character to half-width character
# but only ascii characters
jaconv.z2h('abc', kana=False, ascii=True, digit=False)
# => 'abc'

# full-width character to half-width character
# but only digit characters
jaconv.z2h('123', kana=False, ascii=False, digit=True)
# => '123'

# full-width character to half-width character
# except full-width Katakana
jaconv.z2h('アabc123', kana=False, digit=True, ascii=True)
# => 'アabc123'

# an alias of z2h
jaconv.zenkaku2hankaku('ティロ・フィナーレabc123')
# => 'ティロ・フィナーレabc123'

# normalize
jaconv.normalize('ティロ・フィナ〜レ', 'NFKC')
# => 'ティロ・フィナーレ'

# Hiragana to alphabet
jaconv.kana2alphabet('じゃぱん')
# => 'japan'

# Alphabet to Hiragana
jaconv.alphabet2kana('japan')
# => 'じゃぱん'

# Katakana to Alphabet
jaconv.kata2alphabet('ケツイ')
# => 'ketsui'

# Alphabet to Katakana
jaconv.alphabet2kata('namba')
# => 'ナンバ'

# Hiragana to Julius's phoneme format
jaconv.hiragana2julius('てんきすごくいいいいいい')
# => 't e N k i s u g o k u i:'

히라가나 - 가타카나 가타카나 - 히라가나 전환만 필요한 경우 해당 라이브러리를 이용하면 편리하다

반응형

+ Recent posts