Sự khác nhau giữa Scan và Query trong Amazon DynamoDB? Là Cloud Developer nên biết

Đối với các bạn làm lập trình liên quan nhiều thủ tục thao tác cơ sở dữ liệu thì các thao tác đọc ghi và tối ưu là chuyện xảy ra hàng ngày. Nhưng bạn đã biết sự khác nhau giữa Query và Scan trong database thế nào chưa? Bài này mình cùng tìm hiểu về sự khác nhau giữa Scan và Query trong cơ sở dữ liệu, cụ thể là Amazon DynamoDB là một NoSQL của AWS.

Scan

Scan operation là việc một câu truy cấn phải quét toàn bộ table (accessing every item in a table) hoặc secondary index để trả về một hoặc nhiều item và các attribute liên quan đến kết quả đó.

Can retrieve maximum size limit of 1MB.

Scan sử dụng eventual read consistency mặc định, tuy nhiện bạn có thể yêu cầu Strong read consistency thông qua AWS API khi bắt đầu scan.

Nói chung hoạt động Scan một table trong DynamoDB là một yêu cầu tốn kém, ảnh hưởng rất nhiều tới provisioned capacity cụ thể là năng lực về READ. Về mặt thực tiễn bạn có thể áp dụng một số cách sau để giảm thiểu ảnh hưởng tiêu cực đến performance của DynamoDB table khi sử dụng SCAN:

  • Reduce page size – mặc đinh page size có kích thước 1MB. Mình có thể cấu hình giảm page size này nhỏ hơn để giảm số lần READ và tạo các điểm dừng “pause” giữa các lần READ này.
  • Isolate scan operation – concept này đơn giản là app sẽ liên kết vào 2 tables khác nhau để làm nhiệm vụ khác nhau. “mission critical” table để chạy chính và “shadow” table để làm các workload liên quan SCAN.

Query

Query operation là việc tìm ra item nào đó dựa theo primary key (có thể kết hợp cả partition key và sort key).

Luôn trả về kết quả hoặc empty nếu không thỏa điều kiện. Query result sẽ được sắp xếp mặc định theo sort key.

Tương tự như SCAN, QUERY cũng trả về data tối đa 1MB. Mình có thể query dựa trên primary key, local secondary index, global secondary index.

  • LSI hỗ trợ strong consistency nếu bạn enable trong API calls. Mặc định là eventual consistency.
  • GSI chỉ hỗ trợ eventual consistency.

Để có phản hồi nhanh từ DynamoDB bạn nên thiết kế sử dụng Query hơn là sử dụng SCAN. SCAN có thể phù hợp với dạng cơ sở dữ liệu mạnh về OLAP như Redshift.

Parallel Scans

  • Parallel scan là hành động ứng dụng mình cùng lúc scan vào DynamoDB table. Việc này có thể thực hiện và cho phép do về mặt lưu trữ DynamoDB table ở nhiều AZ khác nhau nhưng việc có nhiều hành động SCAN này có thể gọi là “hãm hiếp” tài nguyên nhanh trở nên cạn kiệt, cụ thể là lấy hết năng lực READ Provisioned capacity của table đó, dẫn đến hiện tượng Throttled.
  • Về mặt phát triển ứng dụng DynamoDB scan functions có thể hỗ trợ 02 tham số sau:
    • TotalSegments – number of workers will access table concurrently
    • Segments – segment of table will be accessed by worker.

References

%d bloggers like this: