DymanoDB quan hệ dữ liệu trong bảng đơn lẻ

DynamoDB là một cơ sở dữ liệu NoSQL được cung cấp bởi Amazon Web Services (AWS). Nó là một dịch vụ cơ sở dữ liệu phi quan hệ, có khả năng mở rộng cao, linh hoạt và hoàn toàn được quản lý bởi AWS. DynamoDB được thiết kế để cung cấp hiệu suất cao, khả năng đọc/ghi nhanh và khả năng mở rộng tự động.

dynamodb

Bài viết dưới đây sẽ giới thiệu các tính năng nổi trội cũng như ưu việt của DymanoDB:

Khả năng chịu tải của DynamoDB

DynamoDB được thiết kế để có khả năng chịu tải rất cao và có thể mở rộng quy mô một cách liền mạch. Nó sử dụng kiến trúc phi tập trung, trong đó dữ liệu được phân tán trên nhiều máy chủ và khu vực khác nhau. Điều này cho phép DynamoDB xử lý hàng triệu yêu cầu đọc/ghi mỗi giây.

Một số đặc điểm chính giúp DynamoDB đạt được khả năng chịu tải cao:

  1. Partition và phân tán dữ liệu: Dữ liệu trong DynamoDB được chia thành nhiều phân vùng (partition) và phân tán trên nhiều máy chủ, cho phép tải song song và mở rộng quy mô dễ dàng.
  2. Khả năng đọc/ghi điều chỉnh: DynamoDB cho phép người dùng điều chỉnh khả năng đọc/ghi hàng giây (read/write capacity units) để đáp ứng nhu cầu về hiệu suất của ứng dụng.
  3. Phân cấp và nhân rộng tự động: DynamoDB có khả năng tự động phân cấp và nhân rộng dữ liệu khi lượng đọc/ghi tăng lên, giúp đảm bảo hiệu suất ổn định mà không cần can thiệp thủ công.
  4. Nhân bản dự phòng: DynamoDB tự động sao lưu dữ liệu trên nhiều khu vực khác nhau trong cùng một khu vực AWS, đảm bảo khả năng phục hồi dữ liệu và chịu tải cao.
AWSのNoSQLデータベースであるAmazon-DynamoDBとは
DynamoDB, mô hình cơ sở dữ liệu NoSQL của AWS

Sự khác nhau về relation giữa multi-table và single-table trong DynamoDB

Multi-table

  • Trong mô hình multi-table, dữ liệu được chia thành nhiều bảng (table) khác nhau dựa trên các quan hệ giữa các thực thể.
  • Mỗi bảng đại diện cho một thực thể và chứa các thuộc tính liên quan đến thực thể đó.
  • Các quan hệ giữa các thực thể (như một-nhiều, nhiều-nhiều) được thể hiện bằng cách sử dụng khóa ngoại (foreign key) để tham chiếu đến các bản ghi trong bảng khác.
  • Mô hình multi-table phù hợp với các ứng dụng có cấu trúc dữ liệu phức tạp và có nhiều quan hệ giữa các thực thể, tuy nhiên hiệu xuất đọc rất chậm.

Single-table với quan hệ (Relation)

  • Trong mô hình single-table với quan hệ, tất cả dữ liệu được lưu trữ trong một bảng duy nhất.
  • Các quan hệ giữa các thực thể được thể hiện bằng cách lồng ghép (nesting) dữ liệu liên quan vào cùng một bản ghi.
  • Điều này đạt được bằng cách sử dụng các kiểu dữ liệu phức tạp như mảng hoặc đối tượng lồng nhau trong DynamoDB.
  • Mô hình single-table với quan hệ thường phù hợp với các ứng dụng có cấu trúc dữ liệu đơn giản hơn và ít quan hệ phức tạp hơn.
  • Nó có thể giúp giảm số lượng yêu cầu dữ liệu cần thiết để lấy dữ liệu liên quan, do đó cải thiện hiệu suất đọc.

Cả hai mô hình đều có ưu và nhược điểm riêng. Lựa chọn giữa multi-table và single-table với quan hệ trong DynamoDB phụ thuộc vào cấu trúc dữ liệu của ứng dụng, mức độ phức tạp của quan hệ, và yêu cầu về hiệu suất đọc và ghi.

DymanoDB quan hệ dữ liệu trong bảng đơn lẻ

Ở bài viết này chúng ta sẽ tìm hiểu về relation ở single table (bảng đơn lẻ) để tặng hiệu xuất và hiệu quả sử dụng.

Ví dụ mô hình “single table” để xây dựng quan hệ giữa Category (Danh mục) và Product (Sản phẩm). Dưới đây là cách thiết kế mô hình dữ liệu cho quan hệ này:

Mô hình dữ liệu

Chúng ta sẽ sử dụng một bảng duy nhất products để lưu trữ thông tin về sản phẩm và danh mục. Mỗi bản ghi trong bảng này sẽ chứa thông tin về một sản phẩm hoặc một danh mục.

Cấu trúc dữ liệu của một bản ghi trong bảng products có thể như sau:

Trong code trên:

  • pk (Partition Key) là kết hợp của type (category hoặc product) và id của danh mục (cho cả danh mục và sản phẩm thuộc cùng danh mục).
  • sk (Sort Key) là kết hợp của type và id của bản ghi (danh mục hoặc sản phẩm).
  • Điều này cho phép chúng ta lấy tất cả các sản phẩm thuộc một danh mục cụ thể bằng cách truy vấn với pk tương ứng.

Thêm một danh mục mới

Để thêm một danh mục mới, bạn có thể tạo một bản ghi mới với type là “category” và các trường thông tin khác cho danh mục đó.

Thêm một sản phẩm mới vào danh mục

Để thêm một sản phẩm mới vào danh mục, bạn tạo một bản ghi mới với type là “product”, pk tương ứng với danh mục chứa sản phẩm đó, và các trường thông tin khác cho sản phẩm.

Truy vấn sản phẩm trong một danh mục cụ thể

Để lấy tất cả sản phẩm trong một danh mục cụ thể, bạn có thể sử dụng truy vấn với pk tương ứng với danh mục đó và sk bắt đầu bằng “PRODUCT#”.

Tạm kết

Bằng cách sử dụng mô hình “single table” này, bạn có thể dễ dàng xây dựng quan hệ giữa Category và Product trong DynamoDB mà không cần sử dụng các bảng khác nhau. Tuy nhiên, mô hình này cũng có một số hạn chế như khó khăn trong việc duy trì toàn vẹn dữ liệu và khả năng mở rộng bị giới hạn khi số lượng sản phẩm và danh mục lớn. Vì vậy, tùy thuộc vào yêu cầu của ứng dụng, bạn có thể cần xem xét sử dụng mô hình “multi-table” hoặc kết hợp cả hai mô hình để đạt được hiệu suất và khả năng mở rộng tốt nhất.

無料相談・お問い合わせ
insightscanXのお問い合わせもこちらからお願いします。
2025年1月からフリートライアル募集中
ご相談やお見積もりは全て 無料 で対応いたします。

    「個人情報保護方針」をお読みいただき同意いただける場合は「送信」ボタンを押して下さい。
    入力していただいたメールアドレス宛に自動返信メールを送信していますので、お手数ですがそちらをご確認ください。
    無料相談・お問い合わせ
    insightscanXのお問い合わせもこちらからお願いします。
    2025年1月からフリートライアル募集中
    ご相談やお見積もりは全て 無料 で対応いたします。

      「個人情報保護方針」をお読みいただき同意いただける場合は「送信」ボタンを押して下さい。
      入力していただいたメールアドレス宛に自動返信メールを送信していますので、お手数ですがそちらをご確認ください。
      無料相談
      お問い合わせ