Để query dữ liệu trong DynamoDB Table bạn cần dùng thông qua các khóa (key). Key ở Dynamodb là các trường unique, là dữ liệu lưu trong các field đó là phải duy nhất.
Ví dụ: ta có một DynamoDB Table có các thuộc tính như sau:
- album_id
- song_name
- author
- singer
- type
Mặc định Key của Dynamo sẽ kết hợp bởi 1 cặp khóa gọi là Partition Key và Sort Key. Khi query bạn cần phải dùng cặp đó để tìm dữ liệu trả về tương ứng.
Giả sử như ở trên để tìm một bài hát ta cần query dựa trên album_id và song_name vì có thể có 02 bài hát trùng tên.
Trong một số trường hợp bạn cần nhiều hơn các tiêu chí để tìm kiếm. Giả sử tìm kiếm theo album_id và song_name còn muốn lọc theo thể loại chẳng hạn (type). thì lúc này time sẽ cần định nghĩa thêm, các trường này gọi là secondary index.
Secondary Index có 02 loại là Local Secondary Index và Global Secondary Index.
- Global Secondary Index (GSI): partition key và sort key có thể khác với keys mặc định của table.
- Local Secondary Index (LSI): dùng chung parition key, nhưng khác sort key.
GSI và LSI giúp mở rộng khả năng tìm kiếm dữ liệu trên DynamoDB Table.
Sự khác nhau giữa Local Secondary Index (LSI) và Global Secondary Index (GSI)
Creation:
- LSI cần được khai báo và khởi tạo khi tạo DynamoDB table
- GSI được tạo ra bất cứ lúc nào
Deletion:
- LSI xóa khi table được xóa, cho nên khi tạo LSI bạn cần có planning chính xác vì bạn phải trả tiền cho Secondary Indexes nói chung.
- GSI có thể xóa bất cứ lúc nào.
Operation Scope:
- LSI hoạt động trong 01 partition của Table. Đúng theo cách đặt tên của nó là Local.
- GSI hoạt động cross partition phạm vi hoạt động rộng hơn.
Size Limit:
- LSI: 10GB – total size of indexed items for any one partition key value.
- GSI: Không có giới hạn
Throughput Usage:
- LSI: Sử dụng chia sẻ với toàn Capacity Unit của Table. Cho nên bạn cần hoạch định chung.
- GSI: Sử dụng riêng và được hoạch định riêng so với table chính.
Defautl quota:
- LSI: 5
- GSI: 20
Consistency Model:
- LSI: Support Strong Consistency
- GSI: Support only Eventual Consistency
Về cơ bản bạn nên dùng GSI hơn là LSI vì có tính linh hoạt cao hơn.
References: