Giới thiệu về Amazon DynamoDB – Phần 1

7 min read

DynamoDB

Amazon DynamoDB là cơ sử dữ liệu NoSQL, đây là dịch vụ serverless với hiệu suất vài mili giây ở mọi quy mô.

1. DynamoDB là gì?

DynamoDB giải quyết các vấn đề về khả năng mở rộng và phức tạp về vận hành của cơ sở dữ liệu quan hệ. DynamoDB được tối ưu hóa để xử lý các tải động mà yêu cầu hiệu suất đồng đều ở mọi quy mô. Ví dụ, DynamoDB cung cấp hiệu suất đồng đều trong vài mili giây đối với các tình huống sử dụng giỏ hàng mua sắm, cho dù bạn có 10 hay 100 triệu người dùng. Ra mắt vào năm 2012, DynamoDB tiếp tục hỗ trợ việc chuyển đổi từ các cơ sở dữ liệ quan hệ, đồng thời giảm chi phí và cải thiện hiệu suất ở quy mô lớn.

Đối với các sự kiện như Ngày Amazon Prime, DynamoDB là nền tảng của nhiều sản phẩm và hệ thống Amazon có lưu lượng truy cập cao, bao gồm Alexa, các trang web amazon và tất cả các trung tâm xử lý đơn hàng Amazon. Trong những sự kiện này, API của DynamoDB đã sử lý hàng ngàn tỷ cuộc gọi từ các sản phẩm và hệ thống của Amazon. DynamoDB liên tục phục vụ hàng trăm khách hàng với các bảng có lưu lượng tối đa lên đến hơn nửa triệu yêu cầu mỗi giây. Nó cũng phục vụ hàng trăm khách hàng với kích thước bảng lớn hơn 200TB và xử lý hơn 1 tỷ yêu cầu mỗi giờ.

2. Core components của Amazon DynamoDB

2.1. Tables, items và attributes

Các thành phần cơ bản của DynamoDB bao gồm:

Bảng (Tables) – Tương tự như các hệ thống cơ sở dữ liệu khác, DynamoDB lưu trữ dữ liệu trong các bảng. Một bảng là một bộ collection dữ liệu. Ví dụ, bạn có thể tạo một bảng gọi là People để lưu trữ thông tin liên lạc cá nhân về bạn bè, gia đình hoặc bất kỳ ai khác có ý nghĩa. Bạn cũng có thể có một bảng Cars để lưu trữ thông tin về các phương tiện mà mọi người lái.

Mục (Items) – Mỗi bảng chứa không hoặc nhiều mục. Một mục là một nhóm các thuộc tính có thể xác định duy nhất so với tất cả các mục khác. Trong bảng People, mỗi mục đại diện cho một người. Đối với bảng Cars, mỗi mục đại diện cho một phương tiện. Các mục trong DynamoDB tương tự như hàng, bản ghi trong các hệ thống cơ sở dữ liệu khác. Trong DynamoDB, không có giới hạn về số lượng mục bạn có thể lưu trữ trong một bảng.

Thuộc tính (Attributes) – Mỗi mục được tạo thành từ một hoặc nhiều thuộc tính. Một thuộc tính là một phần tử dữ liệu cơ bản, cái mà không cần phải phân rã thêm nữa. Ví dụ, một mục trong bảng People có các thuộc tính như PersonID, LastName, FirstName, và các thuộc tính khác. Đối với bảng Department, một mục có thể có các thuộc tính như DepartmentID, Name, Manager, và các thuộc tính khác. Các thuộc tính trong DynamoDB tương tự như các trường hay cột trong các hệ thống cơ sở dữ liệu khác.

Ví dụ sau đây hiển thị một bảng có tênPeople cùng với một số mục và thuộc tính mẫu:

People

{
    "PersonID": 101,
    "LastName": "Smith",
    "FirstName": "Fred",
    "Phone": "555-4321"
}

{
    "PersonID": 102,
    "LastName": "Jones",
    "FirstName": "Mary",
    "Address": {
                "Street": "123 Main",
                "City": "Anytown",
                "State": "OH",
                "ZIPCode": 12345
    }
}

{
    "PersonID": 103,
    "LastName": "Stephens",
    "FirstName": "Howard",
    "Address": {
                "Street": "123 Main",
                "City": "London",                                    
                "PostalCode": "ER3 5K8"
    },
    "FavoriteColor": "Blue"
}

Mỗi mục trong bảng có một định danh duy nhất, hay còn gọi là khóa chính, để phân biệt mục đó với tất cả các mục khác trong bảng. Trong bảng People, khóa chính bao gồm một thuộc tính (PersonID).

Ngoài khóa chính, bảng People là không có schema, điều này có nghĩa là không cần phải định nghĩa trước các thuộc tính hoặc kiểu dữ liệu của chúng. Mỗi mục có thể có các thuộc tính riêng biệt.

Hầu hết các thuộc tính là scalar, có nghĩa là chúng chỉ có thể có một giá trị duy nhất. Chuỗi và số là ví dụ phổ biến về scalar.

Một số mục có một thuộc tính lồng nhau (Address). DynamoDB hỗ trợ các thuộc tính lồng nhau lên đến 32 cấp.

2.2. Primary key

Khi bạn tạo một bảng, ngoài tên bảng, bạn phải chỉ định khóa chính của bảng. Khóa chính xác định mỗi mục trong bảng một cách duy nhất, sao cho không có hai mục nào có thể có cùng một khóa.

DynamoDB hỗ trợ hai loại khóa chính khác nhau:

Khóa phân vùng (Partition key) – Đơn giản là một khóa chính, được tạo thành từ một thuộc tính gọi là khóa phân vùng.

DynamoDB sử dụng giá trị của khóa phân vùng làm đầu vào cho một hàm băm nội bộ. Đầu ra từ hàm băm quyết định vùng (bộ nhớ vật lý nội bộ của DynamoDB) mà mục sẽ được lưu trữ.

Trong một bảng chỉ có khóa phân vùng, không có hai mục nào có thể có cùng giá trị khóa phân vùng.

Khóa phân vùng và khóa sắp xếp (Sort key) – Được gọi là khóa chính hỗn hợp, loại khóa này được tạo thành từ hai thuộc tính. Thuộc tính đầu tiên là khóa phân vùng và thuộc tính thứ hai là khóa sắp xếp.

DynamoDB sử dụng giá trị của khóa phân vùng làm đầu vào cho một hàm băm nội bộ. Đầu ra từ hàm băm quyết định vùng (bộ nhớ vật lý nội bộ của DynamoDB) mà mục sẽ được lưu trữ. Tất cả các mục có cùng giá trị khóa phân vùng được lưu trữ cùng nhau, được sắp xếp theo giá trị khóa sắp xếp.

Trong một bảng có khóa phân vùng và khóa sắp xếp, có thể có nhiều mục có cùng giá trị khóa phân vùng. Tuy nhiên, các mục đó phải có các giá trị khóa sắp xếp khác nhau.

Mỗi thuộc tính khóa chính phải là scalar (có nghĩa là nó chỉ có thể chứa một giá trị duy nhất). Các kiểu dữ liệu cho phép cho các thuộc tính khóa chính chỉ là chuỗi (string), số (number) hoặc nhị phân (binary). Không có các hạn chế này đối với các thuộc tính khác không phải là khóa.

2.3. Secondary indexes

Bạn có thể tạo một hoặc nhiều chỉ mục phụ trên một bảng. Một chỉ mục phụ cho phép bạn truy vấn dữ liệu trong bảng bằng cách sử dụng một khóa thay thế, ngoài các truy vấn đối với khóa chính. DynamoDB không yêu cầu bạn phải sử dụng chỉ mục, nhưng chúng cung cấp cho ứng dụng của bạn nhiều linh hoạt hơn khi truy vấn dữ liệu. Sau khi bạn tạo một chỉ mục phụ trên một bảng, bạn có thể đọc dữ liệu từ chỉ mục một cách tương tự như đọc từ bảng.

DynamoDB hỗ trợ hai loại chỉ mục:

Chỉ mục phụ toàn cầu (Global secondary index – GSI) – Một chỉ mục có khóa phân vùng và khóa sắp xếp có thể khác với các khóa trên bảng gốc.

Chỉ mục phụ cục bộ (Local secondary index – LSI) – Một chỉ mục có cùng khóa phân vùng với bảng gốc, nhưng có khóa sắp xếp khác.

Trong DynamoDB, chỉ mục phụ toàn cầu (GSI) là các chỉ mục bao phủ toàn bộ bảng, cho phép bạn truy vấn qua tất cả các khóa phân vùng. Chỉ mục phụ cục bộ (LSI) là các chỉ mục có cùng khóa phân vùng với bảng cơ sở nhưng có khóa sắp xếp khác.

Mỗi bảng trong DynamoDB có một hạn ngạch là 20 chỉ mục phụ toàn cầu (mặc định) và 5 chỉ mục phụ cục bộ.

Avatar photo

Clean Code: Nguyên tắc viết hàm trong lập trình…

Trong quá trình phát triển phần mềm, việc viết mã nguồn dễ đọc, dễ hiểu là yếu tố then chốt để đảm bảo code...
Avatar photo Dat Tran Thanh
3 min read

Clean Code: Nguyên tắc comment trong lập trình

Trong lập trình, code không chỉ là một tập hợp các câu lệnh để máy tính thực thi, mà còn là một hình thức...
Avatar photo Dat Tran Thanh
3 min read

Clean Code: Nguyên tắc xử lý lỗi (Error Handling)

Trong quá trình phát triển phần mềm, việc xử lý lỗi không chỉ là một phần quan trọng mà còn ảnh hưởng trực tiếp...
Avatar photo Dat Tran Thanh
4 min read

One Reply to “Giới thiệu về Amazon DynamoDB – Phần 1”

Leave a Reply

Your email address will not be published. Required fields are marked *