CockroachDB의 트랜잭션 로그 테일링. 3부

7871 단어
이전 게시물을 보면 내가 중요한 편집을 했음을 알 수 있습니다. 그 이유는 기본적으로 내가 알지 못했던 순간에
CockroachDB Change Data Capture(CDC) . 이 기능은
이 특정 DB는 일을 훨씬 더 쉽게 만듭니다. 트랜잭션 로그 테일링pattern의 트랜잭션 로그 마이너는 문자 그대로 CockroachDB의 CDC가 되었습니다. 매우 간단하고 실용적인 방법으로 말 그대로 리디렉션할 수 있습니다.
테이블과 관련된 로그를 싱크(Kafka, google 클라우드 Pub/Sub 등...)로, 이 특정 통합 기능은 사용할 수만 있습니다.
엔터프라이즈 계층에서. 그럼에도 불구하고 코어 프리 티어에서는 여전히 직접 통합할 수 있습니다. 또한 이전 버전을 변경할 필요가 없습니다.
연결 설정, CockroachDB는 PostgreSQL과 호환되기 때문에 Postgresql 드라이버를 사용하여 CockroachDB에 연결할 수 있습니다.
이제 단계를 설명하고 이를 실행해 보겠습니다.

요구 사항



우리는 이 모든 것을 로컬에서 먼저 코어 계층과 함께 영원히 무료로 시도할 의도가 있습니다. 전체 데모를 제공하기 위해 Google Cloud를 사용하겠습니다.
Pub/Sub는...wait for it...cats ;)라는 주제에 대한 메시지를 기다리는 싱크입니다. 따라서 다음이 필요합니다.
  • 바퀴벌레, 여기에서 설치 세부 정보를 찾을 수 있습니다 ==> Install CockroachDB on Linux . 거기에서 다른 OS에 대한 설치도 찾을 수 있습니다.
  • [선택 사항] Google 클라우드 계정이 있습니다. 시작할 때 메시지를 인쇄하고 나중에 사용할 브로커를 결정할 수 있기 때문에 선택 사항이라고 생각합니다.

  • CockroachDB 돌리기



    꽤 간단하다

    
    cockroach start-single-node --insecure
    
    


    이 명령이 생성하는 로그를 읽으면 중요한 다음 주소를 알 수 있습니다.
  • webui는 브라우저를 통해 Cockroach와 상호 작용할 수 있는 로컬 웹 서버입니다.
  • sql, 데이터베이스와의 연결에 사용할 표준 DSN입니다.

  • [선택] 단말기에서 바퀴벌레로 연결하기

    탐색하고 일부 명령을 입력하려는 경우 매우 간단하게 연결할 수 있습니다.

    
    cockroach sql --url="{DSN}" --format=csv
    
    


    이 마지막 명령에서 DSN이 CockroachDB에 연결하기 위한 URI임을 고려하십시오.

    이제 이 콘솔 내에서 rangefeed을 활성화해야 합니다.

    SET CLUSTER SETTING kv.rangefeed.enabled = true;
    


    golang의 코드



    CockroachDB가 PostgreSQL과 호환된다는 점을 감안할 때 데이터베이스 연결에 여전히 gorm을 사용할 수 있습니다. 다음은 다음을 사용하는 함수의 스니펫입니다.
    CockroachDB CDC는 이벤트 테이블의 모든 변경에 대한 로그를 얻습니다. 물론 이것은 새 로그를 기다리며 중단됩니다.

    파일: repositories/event/repository.go

    package event
    
    // ChangeFeed fetch logs from events feed.
    func (r *repository) ChangeFeed(ctx context.Context, pubsub msgrelay.PubSub) error {
        rows, err := r.db.Raw("EXPERIMENTAL CHANGEFEED FOR events").Rows()
        if err != nil {
            return err
        }
    
        defer rows.Close()
    
        topic := pubsub.Topic("cats")
    
        var (
            table string
            key   string
            value []byte
        )
    
        for rows.Next() {
            if err := rows.Scan(&table, &key, &value); err != nil {
                return err
            }
    
            pubsub.Publish(ctx, topic, value)
        }
    
        return nil
    }
    
    
    


    그렇게 할 수 있는 쿼리는 EXPERIMENTAL CHANGEFEED FOR <table_name> 이며 이는 코어 계층에 있습니다. 기업의 경우
    엄청나게 간단하며 코드에서 브로커와의 통합을 처리할 필요가 없습니다. 말 그대로 다음과 같은 형식을 따릅니다.

    
    CREATE CHANGEFEED FOR TABLE table_name, table_name2 INTO '{scheme}://{host}:{port}?{query_parameters}';
    
    


    결론



    이 모든 것을 통해 나는 당신이 자신을 해킹하고 이 모든 정보로 이 패턴을 구현하는 방법을 찾을 수 있다고 생각합니다. 좀 남겨줄게
    필요하기 때문에 확인할 수 있도록 다음 링크를 클릭합니다. 이것은 전체 설명이 아니라 아주 짧은 설명이었습니다.

    물론 여기에서 전체 코드를 확인할 수 있습니다repository.

    참고: 코드가 더 나을 수 있습니다.

    서지



  • Transaction Log Tailing , 가장 중요한 것은 먼저 패턴의 아이디어를 이해하는 것입니다.

  • CockroachDB CDC .

  • EXPERIMENTAL CHANGEFEED FOR command .

  • Install CockroachDB on Linux .

  • Changefeed to Google Cloud Pub/Sub .
  • 좋은 웹페이지 즐겨찾기