0

Google BigQuery - Bài học 25: Table Clones & Table Snapshots – Sao lưu dữ liệu quy mô lớn với chi phí lưu trữ gần như bằng 0 (Zero-copy)

Chào anh em! Chúng ta đã đi đến bài học cuối cùng của Phần 3: Lập trình hóa SQL, Hàm tự định nghĩa & GIS. Hôm nay, trước khi khép lại phần này để bước sang Phần 4 (Tối ưu hiệu năng, Partitioning, Clustering), chúng ta sẽ khám phá một kỹ thuật sao lưu dữ liệu thông minh và tiết kiệm đến kinh ngạc: Table Clones và Table Snapshots (Công nghệ Zero-copy).

Hãy hình dung tình huống này: Bạn có một bảng dữ liệu lịch sử cực lớn nặng tới 5 Terabyte (TB). Trước khi chạy một kịch bản ETL hoặc một đợt UPDATE dữ liệu hàng loạt quy mô lớn, DevOps yêu cầu bạn phải tạo ra một bản sao lưu (Backup) đề phòng trường hợp xảy ra sự cố.

  • Cách làm truyền thống (Naive Approach): Bạn gõ câu lệnh CREATE TABLE orders_backup AS SELECT * FROM orders;.

  • Hậu quả: BigQuery sẽ tiến hành đọc toàn bộ 5 TB từ bảng gốc và sao chép ra một bản vật lý hoàn toàn mới lưu vào một chỗ khác trên Colossus. Quá trình này ngốn của bạn rất nhiều thời gian, tốn dung lượng ổ cứng trùng lặp gấp đôi (phát sinh thêm tiền lưu trữ 5 TB hàng tháng), và làm tốn kém hàng chục đô la tiền chi phí quét dữ liệu!

Có cách nào tạo bản sao lưu ngay lập tức (trong vòng chưa tới 1 giây) mà tốn 0 đồng tiền lưu trữ ban đầu không? Câu trả lời chính là Zero-copy Cloning! Hãy cùng mổ xẻ cơ chế này ngay bây giờ.

1. Công nghệ Zero-copy Cloning hoạt động như thế nào?

Bí mật đằng sau Table Clones và Table Snapshots nằm ở kiến trúc lưu trữ bất biến (Immutability) của Colossus mà chúng ta đã học ở Bài 2 và Bài 24:

Khi bạn tạo một bản sao (Clone hoặc Snapshot) của bảng 5 용 TB:

  1. BigQuery không hề sao chép hay di chuyển bất kỳ một byte dữ liệu vật lý nào trên ổ đĩa.

  2. Nó chỉ đơn giản là tạo ra một bản tham chiếu siêu dữ liệu mới (Metadata reference) trỏ chung vào cùng một tập hợp các tệp dữ liệu gốc đang nằm sẵn trên Colossus.

  3. Vì bảng mới và bảng cũ dùng chung các tệp dữ liệu vật lý ban đầu, nên dung lượng lưu trữ ban đầu của bảng sao lưu được tính bằng 0 (Zero storage cost)!

2. Phân biệt "Table Clone" và "Table Snapshot"

Mặc dù cả hai đều dùng công nghệ Zero-copy, Google cung cấp 2 đối tượng sao lưu phục vụ cho hai mục đích hoàn toàn khác nhau:

2.1. Table Clone (Bản sao có thể ghi đè)

  • Bản chất: Là một bản sao hoàn chỉnh và độc lập của bảng gốc, nhưng được thừa hưởng cơ chế Copy-on-Write.

  • Đặc điểm:

    • Bạn có thể thoải mái INSERT, UPDATE, DELETE hoặc thậm chí DROP bảng Clone này mà không làm ảnh hưởng gì đến bảng gốc (và ngược lại).

    • Cơ chế lưu trữ thông minh: Khi bạn sửa đổi một phần dữ liệu trên bảng Clone, BigQuery chỉ lưu giữ phần thay đổi phát sinh (Delta changes) vào một tệp mới, còn phần dữ liệu không đổi vẫn tiếp tục dùng chung với bảng gốc để tiết kiệm dung lượng.

  • Cú pháp thực hiện:

    SQL

    -- Tạo một bản sao độc lập (Clone) của bảng orders
    CREATE TABLE `my-project.backup_ds.orders_clone`
    CLONE `my-project.core_dwh.fact_orders`;
    
    

2.2. Table Snapshot (Bản sao "Đóng băng" chỉ đọc)

  • Bản chất: Là một bản sao lưu trạng thái của bảng tại một thời điểm cố định trong quá khứ (Read-only point-in-time image).

  • Đặc điểm:

    • Bạn không thể INSERT hay UPDATE trực tiếp lên một Table Snapshot. Nó hoàn toàn là một bức ảnh chụp tĩnh (Snapshot) phục vụ cho mục đích lưu trữ tuân thủ (Compliance) hoặc backup an toàn.

    • Thường được kết hợp với tính năng Time Travel hoặc tạo trực tiếp từ mốc thời gian quá khứ.

  • Cú pháp thực hiện:

    SQL

    -- Tạo một bản Snapshot chụp lại trạng thái của bảng orders vào 2 giờ trước
    CREATE SNAPSHOT TABLE `my-project.backup_ds.orders_snapshot_20261018`
    AS SELECT * FROM `my-project.core_dwh.fact_orders`
    FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 2 HOUR);
    
    

3. Bảng so sánh nhanh: Clone vs Snapshot vs Standard Table

Tiêu chí Standard Table (Bảng thường) Table Clone Table Snapshot
Chi phí lưu trữ ban đầu Tính tiền toàn bộ dung lượng. 0 đồng (Dùng chung dữ liệu gốc qua cơ chế Zero-copy). 0 đồng (Chỉ tính tiền phần dữ liệu thay đổi của bảng gốc theo thời gian).
Khả năng ghi (Read/Write) Đọc và ghi đầy đủ (INSERT, UPDATE, DELETE). Đọc và ghi đầy đủ (Độc lập hoàn toàn với bảng gốc). Chỉ đọc (Read-only). Không thể sửa đổi trực tiếp dữ liệu bên trong.
Ứng dụng thực tế Lưu trữ dữ liệu nghiệp vụ chính (Production). Tạo môi trường Test / Dev riêng biệt từ dữ liệu thật cho lập trình viên. Lưu trữ dự phòng tuân thủ (Backup / Audit compliance) dài hạn với chi phí cực rẻ.

4. Ứng dụng thực tế: Xây dựng môi trường Staging/Dev chớp nhoáng cho Developer

Một trong những bài toán đau đầu của các Backend / Data Team là làm sao để có một tập dữ liệu lớn thực tế (Production-like data) phục vụ cho việc kiểm thử các câu lệnh SQL nặng hoặc debug lỗi, mà không muốn làm ảnh hưởng đến hệ thống chạy thật (Production).

Với Table Clones, bạn có thể giải quyết bài toán này trong vòng chưa tới 1 giây:

  1. Đội ngũ Data Engineering tạo một bản Clone từ bảng Production sang môi trường Test:

    SQL

    CREATE TABLE `my-project.dev_sandbox.orders_test_env`
    CLONE `my-project.core_dwh.fact_orders`;
    
    
  2. Các lập trình viên tha hồ chạy thử các câu lệnh UPDATE thử nghiệm, test các Stored Procedure phức tạp, hoặc làm hỏng bảng orders_test_env thoải mái mà không sợ bị sập hệ thống thật.

  3. Khi đã test xong, chỉ cần xóa bảng test đi mà không tốn bất kỳ chi phí ổ cứng lưu trữ dài hạn nào ngoài phần dung lượng delta thay đổi cực kỳ nhỏ!

Tổng kết Phần 3 & Chuẩn bị bước sang Phần 4!

Khép lại Bài học 25, chúng ta đã hoàn thành xuất sắc Phần 3: Lập trình hóa SQL, Hàm tự định nghĩa & GIS:

  • Làm chủ Procedural SQL (DECLARE, SET, IF/ELSE, WHILE, Dynamic SQL).

  • Đóng gói quy trình ETL chuyên nghiệp với Stored Procedures và khối bắt lỗi BEGIN...EXCEPTION.

  • Tự viết hàm tùy chỉnh bằng thuần SQL và JavaScript thông qua UDFs.

  • Tích hợp Microservices bên ngoài bằng Remote Functions.

  • Phân tích không gian địa lý Logistics với BigQuery GIS (GEOGRAPHY, ST_Distance).

  • Cứu nguy dữ liệu bằng Time Travel (FOR SYSTEM_TIME AS OF) và sao lưu thông minh không tốn dung lượng với Table Clones & Snapshots (Zero-copy).

Tuy nhiên, hệ thống của bạn ngày một lớn lên từ hàng triệu dòng lên hàng chục tỷ dòng. Dù kiến trúc có xịn đến đâu, nếu bạn không biết cách phân vùng bảng (Partitioning) và phân cụm dữ liệu (Clustering), chi phí quét truy vấn sẽ tăng phi mã.

Mở ra một chương mới cực kỳ quan trọng cho các Data Engineer và Backend Lead! Hẹn gặp lại anh em ở Phần 4: Thiết kế Bảng, Tối ưu Hiệu năng & Cắt giảm Chi phí – bắt đầu với Bài học 26: Table Partitioning – Chiến lược chia bảng theo Thời gian và Số nguyên!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí