Day30(4.22)

ShinJuYong·2022년 4월 22일
0

camp

목록 보기
29/44
post-thumbnail

Inverted-Index

역색인
키워드를 통해 문서를 찾아내는 방식
색인된 키워드를 이용해 역으로 본문(혹은 문서)을 찾는 방식

점심이 들어간 문장을 찾기
ElasticSearch NoSQL

색인
(이름이 "ㅇㅇ"인사람을 찾기)
MySQL

ELK

ElasticSearch

위의 역색인을 이용한 검색 DB

설치

yarn add @elastic/elasticsearch
yarn add @nestjs/elasticsearch

사용

Create
id: Unique ID
index : MYSQL에서의 Table
document : Schema

    this.elasticsearchService.create({
      id: 'myid',
      index: 'myproduct',
      document: {
        ...createProductInput,
      },
    });

Search

    this.elasticsearchService.search({
      index: 'myproduct',
      query: {
        match_all: {},
      },
    });

Logstatsh

기존 정형 SQL에서 로그성데이터검색성데이터를 가져와 ElasticSearch로 저장시킨다.

1단계

/*
Settings
*/
input {
    jdbc {
        # jar파일의 경로
        jdbc_driver_library => "/usr/share/logstash/mysql-connector-java-8.0.28.jar"
        jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
        jdbc_connection_string => "jdbc:mysql://my-database-class:3306/mydocker02"
        jdbc_user => "root"
        jdbc_password => "root"
        # 이 명령문을 언제 실행할것인지 예약.
        schedule => "* * * * *"
        # 들어가서 입력할 QUERYstatement => "select * from product"
    }
}

output{
    # elasticsearch {
    #     hosts => "elasticsearch:9200"
    #     index => "myproduct"
    # }
}

2단계

        ### 2단계    
        jdbc_driver_library => "/usr/share/logstash/mysql-connector-java-8.0.28.jar"
        jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
        jdbc_connection_string => "jdbc:mysql://my-database-class:3306/mydocker02"
        jdbc_user => "root"
        jdbc_password => "root"        
        schedule => "* * * * *"
        ## 어떤 컬럼밸류를 사용할것인지
        use_column_value => true
        ## 어떤 컬럼을 추적할것인지?
        tracking_column => "updatedat"
        tracking_column_type => "timestamp"
        ## 이 파일안에 마지막 실행한 데이터를 저장한다.
        last_run_metadata_path => "./aaa.txt"
        statement => "select id, name, price, updatedat from product where updatedat > :sql_last_value order by updatedat asc"

해당하는 테이블에 updatedAt 컬럼을 만들어서
updatedAt을 저장하는 파일을 만든후, 조회할때마다 updatedAt이 가장 큰 컬럼을 저장후, 조건으로 계속건다

3단계

        ### 3단계    
        jdbc_driver_library => "/usr/share/logstash/mysql-connector-java-8.0.28.jar"
        jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
        jdbc_connection_string => "jdbc:mysql://my-database-class:3306/mydocker02"
        jdbc_user => "root"
        jdbc_password => "root"        
        schedule => "* * * * *"
        use_column_value => true
        tracking_column => "updatedat"
        tracking_column_type => "numeric"
        last_run_metadata_path => "./aaa.txt"
        statement => "select id, name, price, unix_timestamp(updatedat) as updatedat from product where unix_timestamp(updatedat) > :sql_last_value order by updatedat asc"

unixtime으로 계산해 비교할수있는 정확한 시간으로 만든다

크론탭

명령어를 등록하면 해당 스케쥴에 맞게 명령어가 실행된다 (ex: 정기결제, 스크래핑등등..)

Kibana

ElasticSearch를 활용하는 시각화프로그램

메인프로젝트

검색엔진을 이런형태로 구현하기..

파이프라인만들기

알고리즘

Week6 Test : 3/4
프로그래머스-LV1-최소직사각형

0개의 댓글