1. DynamoDB là gì?
DynamoDB là một cơ sở dữ liệu NoSQL được quản lý hoàn toàn bởi AWS hỗ trợ các bảng, key-value và tài liệu (document) với khả năng mở rộng linh hoạt và hiệu suất cao.
2. DynamoDB sử dụng loại mô hình dữ liệu nào?
DynamoDB sử dụng mô hình key-value và document. Các bảng trong DynamoDB được tổ chức thành các mục (items) với mỗi mục chứa một tập thuộc tính (attributes). DynamoDB không có schema cố định ngoài các khóa bắt buộc.
3. Global Secondary Index (GSI) và Local Secondary Index (LSI) khác nhau như thế nào?
- Global Secondary Index (GSI): Cho phép bạn truy vấn dữ liệu dựa trên các thuộc tính khác ngoài primary key của bảng. GSI không bị ràng buộc bởi primary key và có thể có partition key khác với bảng chính.
- Local Secondary Index (LSI): Cho phép truy vấn trên các cột khác nhưng yêu cầu phải có chung partition key như bảng chính.
4. Primary Key trong DynamoDB là gì?
- Partition Key (hash key): Một khóa duy nhất định danh cho mỗi item trong bảng.
- Composite Primary Key: Bao gồm cả Partition Key và Sort Key. Sự kết hợp của hai khóa này giúp định danh duy nhất cho các item và hỗ trợ truy vấn tốt hơn.
5. Throttling trong DynamoDB là gì?
Throttling xảy ra khi số yêu cầu vượt quá provisioned throughput (số đọc/ghi đã định cấu hình). DynamoDB có thể từ chối các yêu cầu đó bằng cách trả về lỗi ProvisionedThroughputExceededException
.
6. Provisioned Mode và On-Demand Mode khác nhau như thế nào?
- Provisioned Mode: Người dùng đặt trước số lượng đọc/ghi mỗi giây cho bảng. Thích hợp cho ứng dụng có lưu lượng truy cập ổn định.
- On-Demand Mode: DynamoDB tự động điều chỉnh năng lực để đáp ứng yêu cầu. Phù hợp cho ứng dụng có lưu lượng không ổn định hoặc không thể dự đoán.
7. Lợi ích của việc sử dụng DynamoDB Streams là gì?
DynamoDB Streams cung cấp một nguồn ghi nhận mọi thay đổi (thêm, sửa, xóa) trên các bảng DynamoDB. Điều này hữu ích trong việc đồng bộ hóa dữ liệu giữa các dịch vụ, phân tích dữ liệu hoặc sao chép dữ liệu.
8. Làm thế nào để tối ưu hóa chi phí DynamoDB?
- Chọn đúng giữa provisioned mode và on-demand mode tùy theo lưu lượng truy cập.
- Sử dụng auto-scaling để tự động điều chỉnh throughput.
- Chỉ định TTL (Time To Live) để tự động xóa dữ liệu không cần thiết.
9. Item Collection Size là gì và nó bị giới hạn như thế nào?
Item Collection là tập hợp tất cả các item có cùng Partition Key. Kích thước tối đa của một Item Collection không được vượt quá 10GB.
10. DynamoDB hỗ trợ ACID như thế nào?
DynamoDB hỗ trợ các giao dịch ACID thông qua DynamoDB Transactions giúp đảm bảo tính nhất quán mạnh mẽ và hoạt động an toàn trong các tình huống như thực hiện nhiều bước trên nhiều bảng.
11. DynamoDB TTL là gì?
TTL (Time To Live) là một tính năng cho phép bạn định cấu hình để tự động xóa các mục đã hết hạn giúp quản lý lưu trữ hiệu quả.
12. DynamoDB không hỗ trợ những gì mà RDBMS có?
DynamoDB không hỗ trợ joins, transaction phức tạp (trừ khi dùng Transactions API) và không có khóa ngoài (foreign keys). Nó cũng không hỗ trợ các truy vấn SQL phức tạp.
13. Khi nào nên chọn DynamoDB thay vì RDBMS?
Khi ứng dụng cần tốc độ, khả năng mở rộng và không yêu cầu các truy vấn phức tạp như join hoặc các giao dịch phức tạp. DynamoDB là lựa chọn phù hợp, đặc biệt khi làm việc với dữ liệu key-value hoặc document.
14. DynamoDB Accelerator (DAX) là gì?
DAX là một dịch vụ cache in-memory cho DynamoDB giúp cải thiện hiệu suất đọc lên đến 10 lần mà không cần phải thay đổi mã của ứng dụng.
15. Làm thế nào để tối ưu hóa truy vấn DynamoDB?
- Sử dụng Primary Key hoặc Secondary Index để truy vấn trực tiếp thay vì quét toàn bộ bảng.
- Tối ưu hóa các bảng bằng cách sử dụng partition key tốt, tránh skew dữ liệu.
- Kết hợp với DAX để cải thiện hiệu suất đọc.