준비: 작업 백엔드로 BigQuery 사용

BigQuery 를 백엔드로 사용하시겠습니까?세계 태권도 연맹?


BigQuery는 데이터 분석 솔루션 분야의 주요 참여자가 되었습니다.그것은 간단하고 효율적이며 경제적인 방식으로 하나를 제공했다ever-growing list of powerful features.그러나 BigQuery는 절대로OLAP, while the sensible option for an application backend is OLTP.
따라서 BigQuery를 백엔드로 사용하는 것은 이상하게 보일 수도 있고...확실히 이와 같다!단지 발생할 수 있는 많은 문제의 표면을 벗기기 위해서이다.
  • BigQuery는 작성을 위해 최적화된 것이 아니라 복잡한 질의를 수행하기 위해 최적화된 것입니다.
  • 단선 삽입을 권장하지 않습니다.
  • BigQuery는 키, 외부 키 또는 구속을 적용하지 않음
  • BigQuery는 규범화 모델에서 좋지 않은 반면에 비규범화
  • 를 장려한다.
  • ...
  • 따라서 BigQuery가 성숙한 응용 프로그램의 저장 백엔드라고 생각한다면 심사숙고해야 한다.
    그러나 어떤 경우 이런 디자인은 약간의 흥미를 불러일으킬 수 있다...
    빅쿼리를 둘러싼 거대한 분석 데이터 플랫폼을 상상해 보세요.이제 플랫폼의 한 구석을 상상해 보십시오. 그 중 일부 설정은 반드시 관계식으로 저장되어야 하며, 이러한 설정 데이터는 데이터의 접근 방식에 영향을 미칠 것입니다.구성을 업데이트하기 위해 API가 공개되었습니다.구성 값을 저장하는 두 가지 옵션이 있습니다.
  • 의 일반적인 방법은 CloudSQL since we're dealing with the Google Cloud Platform를 통해 사무적인 데이터베이스, 예를 들어PostgreSQL이나MySQL을 구축하는 것이다.애플리케이션의 스토리지 백엔드로 사용합니다.이중화 및 백업 정책을 설정합니다.IAM 권한 정리.BigQuery에서 구성 데이터를 쿼리federated queries합니다.이 모든 것이 당연히 너로 하여금 돈을 좀 더 쓰게 할 것이다.
  • 해커 방식: 빅Query 데이터가 집중된 어느 곳에 설정을 저장하고 서버 데이터베이스가 제공하는 거의 무료에 가까운 위탁 관리와 여분에서 이익을 얻는다.bigquery 클라이언트 API를 사용하여 응용 프로그램과 통합합니다.다른 모든 데이터 집합처럼 조회를 진행하다.

  • 집에서 하지 마!이 특기는 전문가가 공연한다

    BigQuery 테이블의 고유성 제약 조건 적용


    모든 경고가 폭로되었으니 계속 집행합시다.구글이 다양한 언어에 빅쿼리 클라이언트 라이브러리를 제공했기 때문에 어렵지 않다.사용REST Api도 가능합니다.
    문제는 OLTP 데이터베이스를 적절하게 제공하지 않음으로써 비용을 절감하는 데 동의하더라도 여전히 제약이 필요할 수 있다는 것입니다.
    구성 테이블이 다음 모드에 포함되어 있다고 가정합니다.
    | Id (STRING) | Attribute (STRING) | Value (STRING) |
    
    강제 집행 Id 값이 유일하다.일반적으로 이것은 OLTP 데이터베이스에 있는 간단한 문장UNIQUE(Id)이다.그러나 이러한 주장은 BigQuery에 존재하지 않습니다.
    다행히도 BigQuery의 새로운 기능은 다음과 같습니다. Transactions

    BigQuery 트랜잭션


    이 문서를 작성할 때 여러 쌍의 장부 거래 기능은 이미 GA 이전 제품에 포함되었다.표준 SQL 스크립트를 원자 트랜잭션으로 포장할 수 있습니다.
    따라서 기존의 고유한 구속조건의 결함을 보완하기 위해 테이블에서 항목을 저장하거나 수정할 때 다음과 같은 순서를 수행할 수 있습니다.
  • 1)거래 열기
  • 2) 저장할 Id가 이미 있으면 검색하고 찾으면 오류 발생
  • 3) 새 항목 삽입
  • 4) 트랜잭션 제출
  • 다음은 이 스크립트의 구현입니다.
    -- 1
    BEGIN TRANSACTION;
    -- 2
    SELECT * FROM (
        SELECT COUNT(1) AS conflict
        FROM `configds.configtable`
        WHERE Id=@input_id
    ) WHERE
    IF (conflict=0, TRUE, ERROR("Id already exists));
    -- 3
    INSERT INTO `configds.configtable`
    VALUES(@input_id,@input_attribute,@input_value);
    -- 4
    COMMIT TRANSACTION;
    
    2단계ERROR()에서는 자동으로 트랜잭션이 롤백되므로 3단계가 발생하지 않습니다.SQL 주입을 방지하려면 여기에 명명된 매개변수를 사용합니다.
    설정을 저장할 때 프로그램 백엔드에서 이 스크립트를 호출합니다. 이것은 프로그램 클라이언트가 동시에 삽입하는 영향을 받지 않도록 보호합니다.

    제한성


    앞에서 말한 바와 같이 이런 구속을 실현하는 방법은 보급될 수 없다.가장 두드러진 제한 사항은 다음과 같습니다.
  • 현재 거래는 상장 전 거래
  • 에 불과하다.
  • unicity는 응용 프로그램 단계에서 실시되었지만 데이터베이스 단계에서 실시되지 않았다.Id의 유일성에 상관없이 다른 BigQuery 클라이언트 (예를 들어 BigQuery 컨트롤러 자체) 의 줄 삽입을 막을 수 있는 것은 아무것도 없습니다. 프로그램만 안전합니다.
  • 성능이 매우 떨어집니다. 스크립트를 실행하는 데 몇 초가 걸립니다.
  • ORMs는 지원되지 않습니다. 간단한 SQL 조회를 작성하고 SQL 주입을 조심해야 합니다
  • 결론


    새로운 BigQuery 멀티 문장 사무 기능은 BigQuery를 실행 가능한 응용 프로그램의 백엔드로 사용할 수 있도록 합니다. 만약 매우 조심스럽게 사용하면 사용할 수 있습니다.그럼에도 불구하고 전통적인 OLTP 데이터베이스와의 균형을 꼼꼼히 고려해야 합니다. 만약에 이 길을 따른다면 당신의 선택을 지켜야 합니다!
    표지 사진 작성자Domi NemethUnsplash

    좋은 웹페이지 즐겨찾기