Lập mô hình dữ liệu là quá trình thiết kế cách ứng dụng lưu trữ dữ liệu trong cơ sở dữ liệu đã cho. Với cơ sở dữ liệu NoSQL như DynamoDB, cách lập mô hình dữ liệu sẽ khác với cách lập mô hình bằng cơ sở dữ liệu quan hệ. Cơ sở dữ liệu quan hệ được xây dựng hướng đến sự linh hoạt và rất phù hợp với các ứng dụng phân tích. Trong quá trình lập mô hình dữ liệu quan hệ, bạn cần bắt đầu với các thực thể của mình trước. Khi có mô hình quan hệ chuẩn hóa, bạn có thể đáp ứng bất kỳ mẫu hình truy vấn nào mình cần trong ứng dụng.

Cơ sở dữ liệu NoSQL (không ràng buộc) được thiết kế nghiêng về tốc độ và khả năng mở rộng—chứ không phải sự linh hoạt. Mặc dù hiệu suất của cơ sở dữ liệu quan hệ có thể giảm khi bạn mở rộng quy mô nhưng việc mở rộng quy mô cơ sở dữ liệu theo chiều ngang như DynamoDB sẽ cung cấp hiệu suất nhất quán ở mọi quy mô. Một số người dùng DynamoDB có các bảng vượt quá 100 TB nhưng hiệu suất đọc và ghi của các bảng này không khác gì so với bảng có kích thước dưới 1 GB.

Để đạt được kết quả tốt nhất với cơ sở dữ liệu NoSQL như DynamoDB, bạn cần thay đổi tư duy khỏi định nghĩa cơ sở dữ liệu thường thấy. Sử dụng những biện pháp tốt nhất sau đây khi lập mô hình dữ liệu bằng DynamoDB.

1. Tập trung vào mẫu hình truy cập
Khi thực hiện bất kỳ kiểu lập mô hình dữ liệu nào, bạn sẽ bắt đầu bằng sơ đồ thực thể - mối quan hệ mô tả các đối tượng (hoặc thực thể) khác nhau trong ứng dụng của bạn và cách chúng kết nối với nhau (hoặc mối quan hệ giữa các thực thể).

Trong cơ sở dữ liệu quan hệ, bạn sẽ trực tiếp đưa thực thể vào bảng và chỉ định mối quan hệ bằng khóa ngoại. Sau khi bạn xác định bảng dữ liệu, cơ sở dữ liệu quan hệ sẽ cung cấp ngôn ngữ truy vấn linh hoạt để trả về dữ liệu ở hình thức bạn cần.

Trong DynamoDB, bạn cần suy nghĩ về các mẫu hình truy cập trước khi lập mô hình bảng. Cơ sở dữ liệu NoSQL chú trọng đến tốc độ, chứ không phải sự linh hoạt. Trước tiên, bạn cần nghĩ về cách truy cập dữ liệu, rồi mới lập mô hình dữ liệu ở hình thức dữ liệu sẽ được truy cập.

Trước khi thiết kế bảng DynamoDB, hãy ghi lại tất cả nhu cầu của bạn về việc đọc và ghi dữ liệu trong ứng dụng. Hãy cẩn trọng và suy nghĩ về tất cả các luồng trong ứng dụng vì bạn chuẩn bị tối ưu hóa bảng cho mẫu hình truy cập.

2. Tối ưu hóa cho số yêu cầu gửi tới DynamoDB
Sau khi ghi lại nhu cầu mẫu hình truy cập của ứng dụng, bạn đã sẵn sàng để thiết kế bảng. Bạn nên thiết kế bảng để giảm thiểu số yêu cầu gửi tới DynamoDB cho từng mẫu hình truy cập. Tốt nhất, mỗi mẫu hình truy cập chỉ cần một yêu cầu tới DynamoDB vì các yêu cầu mạng thường chậm và việc này giới hạn số lượng yêu cầu mạng bạn sẽ tạo trong ứng dụng của mình.

Để tối ưu hóa số yêu cầu gửi tới DynamoDB, bạn cần hiểu rõ một số khái niệm chính sau:

Khóa chính
Chỉ mục phụ
Giao dịch

3. Không làm giả mô hình quan hệ
Những người mới dùng DynamoDB thường tìm cách triển khai một mô hình quan hệ trên DynamoDB không ràng buộc. Nếu cố gắng làm vậy, bạn sẽ mất hầu hết lợi ích của DynamoDB.

Các phản mẫu hình phổ biến nhất (phản hồi không hiệu quả đối với các sự cố lặp lại) mà mọi người thử thực hiện với DynamoDB là:

  •  Chuẩn hóa: Trong cơ sở dữ liệu quan hệ, bạn chuẩn hóa dữ liệu của mình để giảm dư thừa dữ liệu và dung lượng lưu trữ, sau đó sử dụng phép kết nối để kết hợp nhiều bảng khác nhau. Tuy nhiên, các phép kết nối ở quy mô lớn thường chậm và tốn kém. DynamoDB không cho phép thực hiện phép kết nối vì chúng trở nên chậm khi số bảng tăng lên.
  • Mỗi bảng một loại dữ liệu: Bảng DynamoDB của bạn thường sẽ có các loại dữ liệu khác nhau trong một bảng. Trong ví dụ, chúng ta có các thực thể User, Game và UserGameMapping trong một bảng. Trong cơ sở dữ liệu quan hệ, các dữ liệu này sẽ được lập mô hình thành ba bảng khác nhau.
  • Quá nhiều chỉ mục phụ: Mọi người thường tìm cách tạo chỉ mục phụ cho từng mẫu hình truy cập bổ sung mà họ cần. DynamoDB không cần lược đồ và các chỉ mục của bạn cũng vậy. Tận dụng sự linh hoạt của các thuộc tính để tái sử dụng một chỉ mục phụ cho nhiều loại dữ liệu trong bảng. Đây được gọi là quá tải chỉ mục.

Ở các bước sau, chúng ta sẽ xây dựng sơ đồ thực thể - mối quan hệ và chỉ ra trước các mẫu hình truy cập. Đây luôn là những bước đầu tiên khi bạn sử dụng DynamoDB. Sau đó, ở các mô-đun sau, chúng ta sẽ triển khai các mẫu hình truy cập này ở trong thiết kế bảng.

Thời gian hoàn thành mô-đun: 20 phút


  • Bước 1: Xây dựng sơ đồ thực thể - mối quan hệ

    Bước đầu tiên trong mọi hoạt động lập mô hình dữ liệu là xây dựng sơ đồ thể hiện các thực thể trong ứng dụng và mối quan hệ giữa các thực thể với nhau.

    Trong ứng dụng, chúng ta có các thực thể sau:
    • User
    • Game
    • UserGameMapping

    Thực thể User đại diện cho người dùng trong ứng dụng. Một người dùng có thể tạo nhiều thực thể Game và người tạo trò chơi sẽ xác định bản đồ được chơi và thời điểm trò chơi bắt đầu. Một User có thể tạo nhiều thực thể Game, như vậy mối quan hệ giữa User Game là mối quan hệ một - nhiều.

    Cuối cùng, một Game chứa nhiều User và một User có thể chơi trong nhiều Game khác nhau theo thời gian. Vì vậy, mối quan hệ giữa UserGame là nhiều -nhiều. Chúng ta có thể thể hiện mối quan hệ này với thực thể UserGameMapping.

    Sau khi nắm được các thực thể và mối quan hệ này, sơ đồ thực thể - mối quan hệ của chúng tôi được thể hiện bên dưới.

    (Nhấp vào để phóng to)

  • Bước 2: Cân nhắc các mẫu hình truy cập hồ sơ người dùng

     Người dùng trò chơi của chúng ta cần tạo hồ sơ người dùng. Các hồ sơ này bao gồm dữ liệu như tên người dùng, hình đại diện, số liệu thống kê của trò chơi và thông tin khác về từng người dùng. Trò chơi hiển thị những hồ sơ người dùng này khi người dùng đăng nhập. Những người dùng khác có thể xem hồ sơ của một người dùng để xem lại số liệu thống kê và các chi tiết khác của họ.

    Khi người dùng chơi trò chơi, số liệu thống kê của trò chơi sẽ cập nhật để phản ánh số trò chơi mà người dùng đã chơi, số trò chơi người dùng đã chiến thắng và số mạng của người dùng đã đoạt.

    Dựa trên thông tin này, chúng tôi có ba mẫu hình truy cập sau:

    •  Tạo hồ sơ người dùng (Ghi)
    •  Cập nhật hồ sơ người dùng (Ghi)
    • Tải hồ sơ người dùng (Đọc)
  • Bước 3: Cân nhắc các mẫu hình truy cập trước trò chơi

    Trò chơi của chúng ta là trò chơi chiến đấu sinh tồn. Người chơi có thể tạo trò chơi tại bản đồ cụ thể và những người chơi khác có thể tham gia trò chơi. Khi đã có 50 người chơi tham gia, trò chơi sẽ bắt đầu và không nhận thêm người chơi nữa.

    Khi tìm kiếm trò chơi để tham gia, người chơi có thể muốn chơi một bản đồ cụ thể. Những người chơi khác không quan tâm đến bản đồ và sẽ muốn duyệt các trò chơi đang mở ở mọi bản đồ.

    Dựa trên thông tin này, chúng tôi có bảy mẫu hình truy cập sau:

    • Tạo trò chơi (Ghi)
    • Tìm các trò chơi đang mở (Đọc)
    • Tìm các trò chơi đang mở theo bản đồ (Đọc)
    • Xem trò chơi (Đọc)
    • Xem người dùng trong trò chơi (Đọc)
    • Tham gia trò chơi cho người dùng (Ghi)
    • Bắt đầu trò chơi (Ghi)
  • Bước 4: Các mẫu hình truy cập trong và sau trò chơi

    Cuối cùng, hãy cân nhắc các mẫu hình truy cập trong và sau trò chơi.

    Trong quá trình chơi, người chơi tìm cách đánh bại những người chơi khác với mục tiêu trở thành người chơi cuối cùng còn lại. Ứng dụng của chúng tôi theo dõi số mạng mỗi người chơi đã đoạt trong quá trình chơi cũng như khoảng thời gian người chơi bám trụ trong trò chơi. Nếu người chơi là một trong ba người sống sót cuối cùng của trò chơi, họ sẽ nhận được huy chương vàng, bạc hoặc đồng của trò chơi.

    Sau này, người chơi có thể muốn xem lại các trò chơi cũ mà họ đã chơi hoặc những người chơi khác đã chơi.

    Dựa trên thông tin này, chúng tôi có ba mẫu hình truy cập sau:

    • Cập nhật trò chơi cho người dùng (Ghi)
    • Cập nhật trò chơi (Ghi)
    • Tìm tất cả các trò chơi cũ cho một người dùng (Đọc)

    Hiện chúng ta đã chỉ ra tất cả mẫu hình truy cập trò chơi. Ở các mô-đun sau, chúng ta sẽ triển khai các mẫu hình truy cập này bằng DynamoDB.

    Nhớ rằng giai đoạn lập kế hoạch có thể lặp lại lặp đi vài lần. Bắt đầu từ ý tưởng chung về các mẫu hình truy cập mà ứng dụng của bạn cần. Vạch ra khóa chính, chỉ mục phụ và các thuộc tính trong bảng của bạn. Quay lại từ đầu và đảm bảo tất cả các mẫu hình truy cập của bạn đều được đáp ứng. Khi bạn tin chắc rằng giai đoạn lập kế hoạch đã hoàn tất, hãy chuyển sang triển khai.