Chạy SQL Đồng Thời Trên Ba Máy Chủ DuckDB Từ Xa với Giao Thức Quack

Công nghệ16 tháng 8, 2026·7 phút đọc

Bài viết khám phá thử nghiệm kỹ thuật của tác giả khi sử dụng giao thức Quack mới của DuckDB để chạy các truy vấn SQL song song trên ba máy chủ EC2 từ xa, cũng như thực hiện ghi dữ liệu đồng thời. Kết quả cho thấy Quack xử lý tốt cả đọc và ghi từ xa, với chi phí hạ tầng cực kỳ thấp, tuy nhiên giao thức vẫn đang trong giai đoạn thử nghiệm và chưa phù hợp cho hệ thống sản xuất.

Chạy SQL Đồng Thời Trên Ba Máy Chủ DuckDB Từ Xa với Giao Thức Quack

Chạy SQL Đồng Thời Trên Ba Máy Chủ DuckDB Từ Xa với Giao Thức Quack

Giao thức Quack mới của DuckDB mở ra khả năng kết nối và trao đổi dữ liệu giữa các cơ sở dữ liệu trên nhiều máy chủ qua HTTP. Một thử nghiệm chi tiết đã chứng minh việc chạy song song các câu lệnh SQL trên ba máy chủ từ xa, cả đọc và ghi, đều hoạt động hiệu quả. Dù vậy, đây mới chỉ là tính năng thử nghiệm, người dùng cần thận trọng khi áp dụng vào môi trường thực tế.

Giao thức Quack được đội ngũ DuckDB phát hành nhằm cho phép các cơ sở dữ liệu DuckDB trên các máy chủ khác nhau giao tiếp qua HTTP, hỗ trợ đọc và ghi dữ liệu qua lại. Mặc dù nghe có vẻ giống xử lý phân tán, nhưng DuckDB nhấn mạnh Quack không hỗ trợ xử lý truy vấn phân tán. Bài viết này sẽ đi sâu vào một thử nghiệm cụ thể, sử dụng ba máy chủ AWS EC2 để kiểm tra khả năng thực thi SQL đồng thời của giao thức này.

Thiết Lập Hạ Tầng Thử Nghiệm

Tác giả đã thiết lập ba máy chủ EC2 (loại t4g.nano) sử dụng CloudFormation, mỗi máy chủ chứa một cơ sở dữ liệu DuckDB riêng biệt với dữ liệu tổng hợp 10 triệu bản ghi. Các máy chủ có nhiệm vụ khác nhau:

  • Worker 1: Đóng vai trò điều phối, chứa bảng sales (dữ liệu bán hàng)
  • Worker 2: Chứa bảng customers (dữ liệu khách hàng)
  • Worker 3: Chứa bảng products (dữ liệu sản phẩm)

Mỗi máy chủ cài đặt DuckDB 1.5.5, Python 3.12, và quan trọng nhất là extension Quack chính thức từ DuckDB. Dữ liệu được tạo trực tiếp trên từng máy chủ bằng script Python, không tải lên từ máy tính cá nhân, giúp đảm bảo tính đồng nhất trong quá trình kiểm thử.

Sơ đồ kiến trúc triển khai các máy chủ DuckDB trên AWSSơ đồ kiến trúc triển khai các máy chủ DuckDB trên AWS

Cách Hoạt Động của Cơ Chế Điều Phối

Điểm mấu chốt của thử nghiệm nằm ở mã Python chạy trên Worker 1, nơi điều phối ba truy vấn song song. Ý tưởng chính là sử dụng threading.Barrier để đồng bộ hóa các luồng, đảm bảo mọi câu lệnh SQL đều bắt đầu tại thời điểm gần như đồng thời.

Mỗi truy vấn được gói vào một QueryFragment, sau đó Coordinator sẽ:

  1. Tạo một luồng (thread) riêng cho mỗi truy vấn
  2. Sử dụng barrier để giữ tất cả các luồng cho đến khi sẵn sàng, rồi thả chúng ra cùng lúc
  3. Đo thời gian bắt đầu lệch (start spread) và thời gian thực thi (duration) cho từng truy vấn
  4. Kết nối tới từng máy chủ worker qua Quack protocol và gửi SQL từ xa
  5. Thu thập kết quả từ tất cả các luồng và hiển thị thống nhất

Điều thú vị là mỗi fragment có kết nối client DuckDB riêng, tải extension Quack, gắn kết (ATTACH) một worker từ xa và thực thi qua remote.query(). Kết quả được đưa về dạng bảng với các cột mô tả rõ ràng.

Kiểm Chứng Đọc Dữ Liệu Song Song

Để kiểm tra khả năng đọc song song, tác giả chạy ba truy vấn GROUP BY khác nhau trên ba máy chủ: nhóm theo trạng thái đơn hàng, quốc gia khách hàng, và loại sản phẩm. Kết quả cho thấy cả ba truy vấn đều hoàn thành trong khoảng 0.5 giây, với độ lệch thời gian bắt đầu chỉ khoảng 4.8 mili giây - đủ để chứng minh tính đồng thời gần như tuyệt đối.

Với các truy vấn phức tạp hơn, bao gồm cửa sổ trượt (rolling window), hàm xếp hạng, và phân vị, hệ thống vẫn hoạt động tốt. Độ lệch thời gian bắt đầu được cải thiện đáng kể, chỉ còn 0.42 mili giây, cho thấy hiệu suất ổn định ngay cả khi khối lượng tính toán lớn.

Kiểm Tra Ghi và Đọc Đồng Thời

Phần thú vị nhất là kiểm tra khả năng ghi/đọc đồng thời. Tác giả chạy 20 lệnh INSERT song song (mỗi lệnh một giao dịch autocommit riêng) cùng với ba truy vấn SELECT. Kết quả cho thấy:

  • Các lệnh INSERT thành công và độc lập nhau
  • Các truy vấn SELECT thấy được số lượng bản ghi khác nhau (4, 13, 16) tùy thuộc thời điểm chạy, phản ánh trạng thái snapshot nhất quán
  • Không có hiện tượng nửa chừng trong truy vấn - mỗi SELECT thấy một trạng thái dữ liệu ổn định

Tác giả lưu ý rằng không có transaction phân tán ở đây. Nếu 19 lệnh INSERT thành công và một lệnh thất bại, 19 thành công vẫn được giữ nguyên, không có rollback trên toàn hệ thống.

Kết quả thực thi các truy vấn song song trên ba máy chủ DuckDBKết quả thực thi các truy vấn song song trên ba máy chủ DuckDB

Chi Phí Vận Hành và Đánh Giá

Tác giả nhấn mạnh chi phí vận hành cực kỳ thấp. Với ba máy chủ t4g.nano, ba ổ đĩa gp3 8GB, và vài giờ chạy thử nghiệm, tổng chi phí ước tính chỉ khoảng $0.12 cho 4 giờ - con số không đáng kể so với giá trị kiểm thử mang lại. Dịch vụ SSH không được sử dụng; thay vào đó, AWS Systems Manager Session Manager được dùng để truy cập terminal.

Tuy nhiên, cần lưu ý những hạn chế:

  • Quack là tính năng thử nghiệm (experimental) theo tuyên bố của đội ngũ DuckDB
  • Các tên hàm, cài đặt, và mặc định có thể thay đổi trong tương lai
  • Không nên sử dụng Quack trong hệ thống sản xuất
  • Không hỗ trợ truy vấn phân tán thực sự

Hỗ Trợ DDL và Khả Năng Mở Rộng

Ngoài DML (INSERT, SELECT), thử nghiệm cũng chứng minh Quack hỗ trợ tốt DDL như CREATE OR REPLACE TABLE. Tác giả đã tạo ba bảng mới trên ba máy chủ khác nhau rồi truy vấn chúng, tất cả đều hoạt động trơn tru.

Một tính năng tiện lợi khác là khả năng đọc SQL từ các tệp tin riêng biệt, giúp dễ dàng quản lý và tái sử dụng. Người dùng cũng có thể thêm cờ --show-sql để xem câu lệnh SQL thực tế tương ứng với mỗi nhãn truy vấn trong đầu ra.

Tổng Kết và Tiềm Năng Tương Lai

Thử nghiệm "cluster-duck" đã thành công trong việc chứng minh rằng DuckDB's Quack có thể xử lý tốt việc đọc và ghi đồng thời từ xa. Mặc dù còn nhiều giới hạn, đây là một bước tiến quan trọng trong hệ sinh thái DuckDB.

Nếu Quack trở thành phần được hỗ trợ chính thức, tác giả tin rằng nó có thể cung cấp nền tảng truyền tải và quản lý phiên cho một engine DuckDB phân tán trong tương lai. Nhưng ngay cả với khả năng hiện tại, Quack vẫn rất hữu ích cho các nhu cầu song song hóa truy vấn giữa các máy chủ.

Giao diện đầu ra của công cụ quản lý truy vấn song song cluster-duckGiao diện đầu ra của công cụ quản lý truy vấn song song cluster-duck

Kết Luận

Bài viết cung cấp một cái nhìn chi tiết và thực tế về cách sử dụng giao thức Quack để chạy SQL đồng thời trên nhiều máy chủ DuckDB từ xa. Với chi phí thử nghiệm cực thấp và kết quả khả quan, đây là một gợi ý hữu ích cho các kỹ sư dữ liệu đang tìm kiếm giải pháp đơn giản cho bài toán truy vấn phân tán nhẹ nhàng.

Tất cả mã nguồn, CloudFormation template, và hướng dẫn cài đặt đều có sẵn trên GitHub repo cluster-duck, giúp cộng đồng dễ dàng tái tạo thử nghiệm và khám phá thêm các khả năng khác của Quack. Đối với cộng đồng Việt Nam, xu hướng sử dụng DuckDB đang ngày càng phổ biến trong các dự án phân tích dữ liệu, và việc nắm bắt sớm các giao thức kết nối như Quack sẽ là lợi thế đáng kể cho các kỹ sư dữ liệu trong nước.

Thông tin thêm: Bạn có thể tìm tài liệu chính thức về DuckDB và Quack tại duckdb.org/docs/current. Tác giả cũng đang tìm kiếm cơ hội hợp tác với tư cách kỹ sư dữ liệu (remote hoặc tại Edinburgh, UK) với các kỹ năng AWS, AI, Python, SQL, PySpark, DuckDB.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗