SQL to NoSQL: Lập kế hoạch di chuyển ứng dụng của bạn sang Amazon DynamoDB

Nguồn: SQL to NoSQL: Planning your application migration to Amazon DynamoDB | AWS Database Blog

Bởi Ramana Mannava, Mahesh Kumar V, và Akber Rizwan Shaik vào ngày 03 tháng 7 năm 2025 trong các lĩnh vực: Amazon DynamoDB, Intermediate (200), Migration, Technical How-to Permalink  Comments  Share

Các tổ chức khi di chuyển từ cơ sở dữ liệu quan hệ sang Amazon DynamoDB thường đối mặt với những thách thức trong việc thiết kế lại mô hình dữ liệu (data models) và các mẫu truy cập (access patterns). Sự thay đổi này đòi hỏi một sự thấu hiểu về những khác biệt nền tảng trong khả năng truy vấn, các phương pháp mô hình hóa dữ liệu, và kiến trúc ứng dụng. Đây là điều kiện tiên quyết để đạt được hiệu năng tối ưu trong khi vẫn duy trì được các chức năng của ứng dụng.

Một ví dụ thực tế đã minh họa cho những thách thức này: Một nền tảng mạng xã hội đang trên đà tăng trưởng nhanh chóng nhận thấy cơ sở dữ liệu quan hệ của họ gặp khó khăn với các truy vấn phức tạp có sử dụng các phép nối (joins) giữa nhiều bảng, đặc biệt là cho các tính năng như bài đăng thịnh hành (trending posts) và các tương tác với nội dung của người nổi tiếng. Lượng người dùng của nền tảng này được dự báo sẽ tăng gấp nhiều lần trong thời gian tới, làm dấy lên những lo ngại về khả năng mở rộng của kiến trúc hiện tại. Trong các sự kiện lan truyền (viral events) với hàng nghìn người dùng đồng thời (concurrent users), các truy vấn nối phức tạp để lấy nội dung thịnh hành đã cho thấy dấu hiệu quá tải, chỉ ra rằng kiến trúc hiện tại có thể sẽ không đáp ứng được nhu cầu về khả năng mở rộng ngày càng tăng của nền tảng.

Đây là phần đầu tiên trong một chuỗi bài viết khám phá cách di chuyển hiệu quả từ SQL sang DynamoDB. Chúng ta sẽ xem xét cách phân tích cấu trúc cơ sở dữ liệu hiện tại và các mẫu truy vấn để chuẩn bị cho việc di chuyển, tập trung vào phân tích sơ đồ, mẫu truy vấn và các chỉ số sử dụng giúp thiết kế mô hình dữ liệu DynamoDB. Các bài viết tiếp theo sẽ đề cập đến các chiến lược mô hình hóa dữ liệu và hiện đại hóa lớp truy cập dữ liệu.

So sánh giữa Cơ sở dữ liệu quan hệ (SQL) và NoSQL

Khi chuyển đổi ứng dụng của bạn từ một cơ sở dữ liệu quan hệ truyền thống sang DynamoDB, có một vài khác biệt chính so với việc di chuyển giữa các cơ sở dữ liệu quan hệ với nhau. Hiểu rõ những điểm khác biệt này (được trình bày chi tiết trong bảng sau) là điều cực kỳ quan trọng để hiện đại hóa thành công.

Khía cạnhCơ sở dữ liệu quan hệAmazon DynamoDB
Ngôn ngữ truy vấnSử dụng SQL với các mẫu truy vấn có cấu trúc.Cung cấp các hoạt động dựa trên API với độ trễ mili giây một chữ số ổn định thông qua việc truy cập khóa phân vùng và khóa sắp xếp đã được tối ưu hóa.
Mô hình dữ liệuSử dụng các cấu trúc dữ liệu được chuẩn hóa (normalized) và đã được thiết lập tốt.Cung cấp mô hình hóa dữ liệu phi chuẩn hóa (denormalized) linh hoạt, được tối ưu hóa cho hiệu năng và khả năng mở rộng ở mọi quy mô.
Khuôn khổ truy cập dữ liệuSử dụng các khuôn khổ ORM (Object-Relational Mapping) đã trưởng thành như Entity Framework và Hibernate.Cung cấp các bộ SDK (Software Development Kit) gốc toàn diện trên nhiều ngôn ngữ lập trình, với các thư viện được xây dựng chuyên dụng cho phép đạt hiệu năng cao trong khi vẫn duy trì các mẫu lập trình hướng đối tượng quen thuộc.

Việc di chuyển từ một cơ sở dữ liệu quan hệ này sang một cơ sở dữ liệu quan hệ khác thường có tác động tương đối thấp đến lớp truy cập dữ liệu (data access layer), bởi vì cấu trúc và các mẫu truy cập nền tảng vẫn tương tự nhau. Việc di chuyển sang DynamoDB giới thiệu một phương pháp tiếp cận khác, tận dụng được các khả năng NoSQL mạnh mẽ của nó. Sự thay đổi trong mô hình dữ liệu, ngôn ngữ truy vấn và các mẫu truy cập cho phép các ứng dụng tận dụng được hiệu năng cao và khả năng mở rộng của DynamoDB. Các đội nhóm có thể điều chỉnh lớp truy cập dữ liệu của họ để phù hợp với các nguyên tắc thiết kế của DynamoDB, nhằm tối ưu hóa cho hiệu suất và tính hiệu quả nhất quán.

Ngoài ra, trong một quy trình di chuyển cơ sở dữ liệu quan hệ truyền thống, đội ngũ cơ sở dữ liệu (database team) chủ yếu xử lý việc thiết lập, nhưng sự tham gia của đội ngũ ứng dụng (application team) thường bị hạn chế. Tuy nhiên, khi chuyển sang DynamoDB, sự hợp tác giữa đội ngũ ứng dụng và đội ngũ cơ sở dữ liệu trở nên rất quan trọng. Đội ngũ ứng dụng phải làm việc chặt chẽ với các chuyên gia cơ sở dữ liệu để thiết kế một mô hình dữ liệu DynamoDB tối ưu, phù hợp với các yêu cầu truy cập dữ liệu của ứng dụng. Nỗ lực hợp tác này chính là chìa khóa cho một cuộc di chuyển thành công sang cơ sở dữ liệu NoSQL của DynamoDB.

Phân tích trong Mô hình hóa Dữ liệu

Việc di chuyển từ một cơ sở dữ liệu quan hệ sang DynamoDB sẽ được hưởng lợi từ việc lập kế hoạch cẩn thận để đạt được hiệu năng tối ưuhiệu quả về chi phí. Đầu tiên, chúng tôi đánh giá độ phức tạp của cơ sở dữ liệu quan hệ hiện có để xác định các yêu cầu của mình. Việc đánh giá này sẽ định hướng cho việc thiết kế một mô hình dữ liệu DynamoDB phù hợp, có khả năng mở rộng hiệu quả theo tải công việc (workload) của bạn. Một sự đánh giá ban đầu kỹ lưỡng sẽ giúp quá trình chuyển đổi sang DynamoDB diễn ra suôn sẻ hơn. Quá trình di chuyển bao gồm việc phân tích các cấu trúc dữ liệu hiện tại, xác định các mẫu truy cập (access patterns), và tối ưu hóa cho mô hình cặp khóa-giá trị (key-value pair) của DynamoDB.

Trường hợp sử dụng nền tảng mạng xã hội

Để minh họa các khái niệm trong bài viết này, chúng ta sử dụng một nền tảng mạng xã hội, nơi người dùng có thể tạo và tương tác với các bài viết. Như được thể hiện trong sơ đồ dưới đây, các thực thể cốt lõi bao gồm người dùng tạo bài viết, với các bình luận và lượt thích liên quan để tương tác. Nền tảng theo dõi các chỉ số thông qua các thực thể user counterpost counter, giúp duy trì các thống kê như tổng số bài viết mỗi người dùng và các chỉ số tương tác mỗi bài viết. Sơ đồ thể hiện các mối quan hệ chính trong mô hình quan hệ hiện tại của chúng ta:

  • Người dùng với bài viết (mối quan hệ một-nhiều)
  • Bài viết với bình luận (mối quan hệ một-nhiều)
  • Người dùng và bài viết với các bộ đếm tương ứng (mối quan hệ một-một)
  • Người dùng với bài viết thông qua lượt thích (mối quan hệ nhiều-nhiều), nơi người dùng có thể thích nhiều bài viết và bài viết có thể nhận được lượt thích từ nhiều người dùng
Social platform database schema showing User-Post relationships with Counter tracking and engagement features like Likes/Comments

Phân tích sơ đồ

Bắt đầu với việc kiểm tra kỹ lưỡng cấu trúc cơ sở dữ liệu hiện tại của bạn. Phân tích này giúp xác định những bảng nào cần di chuyển và hiểu được sự phức tạp trong việc mô hình hóa dữ liệu trong DynamoDB.

Phân tích cấu trúc cơ sở dữ liệu

Đầu tiên, hãy kiểm tra kiến trúc cơ sở dữ liệu hiện tại của bạn:

  • Xác định các bảng (giao dịch, phân tích, nhật ký audit, v.v.) và các mối quan hệ của chúng
  • Phân tích các kiểu dữ liệu (văn bản, số, datetime, guid, không gian, v.v.) và xác định các kiểu dữ liệu tương đương trong DynamoDB
  • Ghi chú kích thước bảng và các mô hình tăng trưởng, lưu ý đến giới hạn kích thước 400 KB cho mỗi mục trong DynamoDB

Việc hiểu cách ứng dụng của bạn sử dụng các kiểu dữ liệu khác nhau sẽ định hướng cho cách biểu diễn chúng trong DynamoDB. Các trường ngày giờ (Datetime) cần được ánh xạ sang dạng chuỗi ISO hoặc số epoch, tùy thuộc vào yêu cầu truy vấn và sắp xếp của bạn. Các trường văn bản (TEXT) đòi hỏi việc đánh giá kích thước khi quá trình phi chuẩn hóa (denormalization) kết hợp nhiều trường vào một mục duy nhất, chẳng hạn như nội dung bài đăng có nhúng các bình luận. Việc phân tích này giúp thiết kế một mô hình dữ liệu hỗ trợ việc truy vấn hiệu quả trong khi vẫn duy trì được tính toàn vẹn của dữ liệu.

Các xem xét về Microservices

Nếu hiện đại hóa theo kiến trúc microservices, hãy xác định các phụ thuộc về bảng đối với mỗi dịch vụ:

  • Liệt kê các bảng cần thiết cho mỗi dịch vụ
  • Ghi lại các phụ thuộc dữ liệu giữa các dịch vụ
  • Lập kế hoạch cho chiến lược denormalization
  • Đánh giá yêu cầu về tính nhất quán dữ liệu

Hãy xem xét cách các dịch vụ cần chia sẻ và truy cập dữ liệu xuyên suốt các ranh giới. Ví dụ, dịch vụ bài đăng (post service) có thể yêu cầu tên người dùng và ảnh đại diện để hiển thị, trong khi dịch vụ thông báo (notification service) lại có thể cần các tùy chọn của người dùng để gửi cảnh báo. Sự phụ thuộc dữ liệu chéo giữa các dịch vụ này sẽ ảnh hưởng đến các quyết định mô hình hóa DynamoDB của bạn. Hãy đánh giá sự đánh đổi giữa việc duy trì sự cô lập dịch vụ một cách nghiêm ngặt so với việc phi chuẩn hóa (denormalizing) các thuộc tính cụ thể dựa trên các mẫu truy cập và tần suất cập nhật. Hãy cân nhắc đến tác động về hiệu năng của các lệnh gọi chéo dịch vụ (cross-service calls) và lập kế hoạch cho các kịch bản mà ranh giới dịch vụ có thể cần phải điều chỉnh khi các mẫu ứng dụng phát triển.

Phân tích di chuyển một phần

Khi chỉ di chuyển một tập con các bảng sang DynamoDB, cần hiểu các mối quan hệ giữa các bảng đã di chuyển và chưa di chuyển:

  • Xác định phạm vi di chuyển và các phụ thuộc
  • Đánh giá các tác động đến hiệu suất
  • Lập kế hoạch sửa đổi ứng dụng
  • Thiết kế các chiến lược tính nhất quán dữ liệu
  • Định nghĩa các giai đoạn di chuyển trong tương lai

Hãy xem xét một kịch bản trong đó dữ liệu thường xuyên được truy cập như bài viết và bình luận được chuyển sang DynamoDB, trong khi dữ liệu phân tích lịch sử vẫn ở trong cơ sở dữ liệu quan hệ. Thiết kế các mẫu để xử lý các thao tác trước đây phụ thuộc vào tính nhất quán giao dịch giữa các bảng. Lập kế hoạch cho các tác động tiềm năng về độ trễ của các truy vấn giữa các cơ sở dữ liệu và triển khai các cơ chế đồng bộ hóa dữ liệu thích hợp. Hiểu biết này có thể giúp bạn phát triển các chiến lược hiệu quả để duy trì tính nhất quán dữ liệu và hiệu suất ứng dụng trong suốt và sau khi di chuyển.

Đánh giá đối tượng sơ đồ

Đánh giá cách triển khai các chức năng đối tượng sơ đồ SQL trong thiết kế DynamoDB của bạn:

  • Ghi lại các SQL views và cách sử dụng ứng dụng của chúng
  • Phân tích độ phức tạp của các stored procedure, bao gồm Common Table Expressions (CTEs)
  • Lập kế hoạch di chuyển logic nghiệp vụ dựa trên trigger
  • Đánh giá các tham chiếu đến các bảng không thuộc phạm vi di chuyển
  • Xem xét các phương án thay thế cho các truy vấn phân tích phức tạp
  • Lập kế hoạch cho các thay đổi dữ liệu quy mô lớn

Các SQL views tổng hợp các chỉ số tương tác giữa các bảng, stored procedures tính toán nội dung thịnh hành với dữ liệu theo cửa sổ thời gian và các triggers duy trì dữ liệu tính toán sẵn như số bài viết cần được tưởng tượng lại trong DynamoDB. Thiết kế các mô hình dữ liệu để hỗ trợ các mẫu truy cập hiệu quả mà không phụ thuộc vào các thao tác SQL. Xem xét các phương pháp xử lý theo lô cho các thay đổi dữ liệu quy mô lớn và lập kế hoạch cho cách logic ứng dụng sẽ xử lý các thao tác trước đây do các database procedurestriggers quản lý. Bằng cách thực hiện phân tích sơ đồ kỹ lưỡng và lập kế hoạch cẩn thận, các nhóm có thể dự đoán các yêu cầu triển khai, tối ưu hóa các mẫu truy vấn và phát triển các chiến lược tính nhất quán dữ liệu hiệu quả. Hiểu biết này là yếu tố quan trọng để hiện đại hóa thành công, giúp các nhóm tận dụng tối đa khả năng của DynamoDB trong ứng dụng của họ.

Phân tích truy vấn

Phân tích các SQL queries được sử dụng trong ứng dụng, bao gồm inline SQL, ORM-generated queries, và các truy vấn động khác. Phân tích này cung cấp thông tin để chọn khóa phân vùng, khóa sắp xếp và các mối quan hệ phù hợp cho mô hình dữ liệu DynamoDB. Kiểm tra từng thành phần của các truy vấn SQL như sau.

Phân tích mệnh đề SELECT

Việc kiểm tra các mệnh đề SELECT cung cấp cái nhìn về cách ứng dụng của bạn tiêu thụ dữ liệu và mối quan hệ giữa các thực thể khác nhau. Hãy xem xét các khía cạnh quan trọng sau khi phân tích các mệnh đề SELECT:

  • Subqueries – Tìm kiếm các subqueries trong các mẫu truy cập hiện có có thể thường xuyên có các phép toán tổng hợp, lọc dựa trên các điều kiện phức tạp, truy vấn chi tiết các thực thể liên quan, hoặc truy xuất các bản ghi mới nhất. Ví dụ, một truy vấn hồ sơ người dùng có thể sử dụng các subqueries để tính tổng số bài viết và số lượng người theo dõi, trong khi một truy vấn bài viết có thể truy xuất các bình luận gần đây nhất. Hiểu được những mẫu này giúp xác định dữ liệu nào cần denormalize và các thuộc tính nào cần duy trì dưới dạng các giá trị đã được tính toán sẵn trong DynamoDB.

— User profile with total posts count

SELECT u.name, u.profile_pic,

(SELECT COUNT(*) FROM posts WHERE user_id = u.user_id) as post_count

FROM users u

WHERE u.user_id = ‘123’

Chọn cột từ nhiều bảng – Phân tích cách mà các truy vấn của bạn kết hợp các cột từ nhiều bảng, điều này cho thấy dữ liệu thường xuyên được truy cập cùng nhau. Một truy vấn hiển thị bài viết điển hình kết hợp nội dung với chi tiết tác giả và các thống kê tương tác trong một lần truy xuất. Phân tích này giúp xác định các thuộc tính từ các thực thể khác nhau có thể được denormalize thành một mục duy nhất để hỗ trợ các hoạt động đọc hiệu quả trong DynamoDB.

— Post with author details

SELECT p.content, p.created_at, u.name, u.profile_pic

FROM posts p

JOIN users u ON p.user_id = u.user_id

WHERE p.post_id = ‘456’

  • Hàm người dùng định nghĩa – Xem xét việc sử dụng các hàm tùy chỉnh trong các truy vấn của bạn, những hàm này biến đổi hoặc tính toán dữ liệu trong quá trình truy xuất. Các hàm tính toán điểm thịnh hành bằng cách kết hợp nhiều yếu tố tương tác với trọng số theo thời gian đại diện cho các phép toán phức tạp trong các truy vấn. Hiểu được các phép toán này giúp xác định các thuộc tính cần được tính toán trước và lưu trữ, cũng như cách cấu trúc mô hình dữ liệu của bạn để hỗ trợ việc cập nhật hiệu quả các giá trị đã tính toán này trong DynamoDB.

Cột tính toán – Kiểm tra các cột tính toán hoặc điều kiện trong các truy vấn của bạn, những cột kết hợp nhiều giá trị trường hoặc áp dụng logic nghiệp vụ. Các truy vấn thường tính toán tổng hợp các chỉ số tương tác và xác định trạng thái nội dung dựa trên ngưỡng tương tác. Phân tích này sẽ hướng dẫn các quyết định về việc duy trì các thuộc tính đã tính toán trong các mục của bạn và thiết kế các mẫu cập nhật hiệu quả trong DynamoDB để giữ cho các giá trị tính toán này luôn được cập nhật.

— Derived engagement score and post status

SELECT post_id, content,

(like_count + comment_count) as total_engagement,

CASE WHEN like_count > 1000 THEN ‘TRENDING’

WHEN like_count > 100 THEN ‘POPULAR’

ELSE ‘NORMAL’

END as post_status

FROM posts

WHERE created_at > DATEADD(year, -1, GETUTCDATE())

Phân tích mệnh đề JOIN

Phân tích cách mà ứng dụng của bạn kết hợp dữ liệu từ nhiều bảng giúp xác định chiến lược mô hình dữ liệu tối ưu trong DynamoDB. Hãy xem xét các khía cạnh quan trọng sau khi phân tích mệnh đề JOIN:

  • Mối quan hệ giữa các thực thể – Phân tích các bảng nào thường xuyên được kết hợp trong các truy vấn của bạn. Ví dụ, một truy vấn hiển thị bài viết có thể kết hợp dữ liệu từ các bảng bài viết, bình luận, lượt thích và người dùng, điều này chỉ ra rằng các thực thể này thường xuyên được truy cập cùng nhau trong thao tác này. Hiểu được các sự kết hợp này giúp xác định dữ liệu nào cần được denormalize hoặc mô hình hóa cùng nhau trong DynamoDB để truy cập hiệu quả.
  • Điều kiện JOIN – Đánh giá các điều kiện và tính chất của các mối quan hệ giữa các bảng. Ví dụ, một bài viết có thể kết hợp với nhiều bình luận (mối quan hệ một-nhiều) trong khi kết hợp với chính xác một hồ sơ người dùng (mối quan hệ một-một). Các điều kiện JOIN cũng có thể bao gồm phạm vi ngày tháng hoặc cờ trạng thái ngoài việc chỉ so khớp khóa đơn giản. Hiểu các tính chất này giúp xác định chiến lược mô hình hóa phù hợp — có nên nhúng dữ liệu vào trong các mục hay duy trì các mục riêng biệt — và giúp ước tính các mẫu đọc/ghi để đánh giá hiệu suất và tác động chi phí của các phương pháp mô hình hóa khác nhau.

— Post with its comments

SELECT p.*, u.*, c.comment_text, c.created_at

FROM posts p

JOIN comments c ON p.post_id = c.post_id

AND c.created_at > DATEADD(hour, -24, GETUTCDATE())

JOIN users u ON p.user_id = u.user_id

WHERE p.post_id = ‘456’

  • JOIN trong kiến trúc đa dịch vụ và kiến trúc hỗn hợp – Xem xét các JOIN liên quan đến các bảng thuộc các dịch vụ khác nhau hoặc các bảng không có kế hoạch di chuyển. Ví dụ, nếu dữ liệu bài viết kết hợp với dữ liệu hồ sơ người dùng được quản lý bởi một dịch vụ riêng biệt, hoặc với dữ liệu phân tích vẫn ở trong cơ sở dữ liệu quan hệ, những mẫu này sẽ cung cấp thông tin cho quyết định mô hình hóa dữ liệu của bạn. Phân tích này giúp định hướng chiến lược truy cập dữ liệu qua các ranh giới dịch vụ và các cơ sở dữ liệu khác nhau.

Phân tích mệnh đề WHERE

Việc kiểm tra các mệnh đề WHERE trong các truy vấn SQL của bạn cung cấp cái nhìn về cách ứng dụng của bạn lọc và truy cập dữ liệu. Phân tích này có giá trị trong việc thiết kế các mẫu truy cập hiệu quả trong DynamoDB. Hãy xem xét các khía cạnh sau khi phân tích các mệnh đề WHERE:

Bộ lọc giá trị đơn – Xác định các bộ lọc giá trị đơn thường xuyên được sử dụng trong các truy vấn của bạn. Ví dụ, lọc bài viết theo ID người dùng cụ thể hoặc truy xuất bài viết theo trạng thái. Những mẫu này giúp xác định các khóa phân vùng tiềm năng cho bảng cơ sở của bạn hoặc các chỉ mục phụ toàn cầu (GSI) trong DynamoDB, giúp truy xuất dữ liệu hiệu quả qua các mẫu truy cập khác nhau.

— Single value filter

SELECT * FROM posts WHERE user_id = ‘123’

AND status = ‘ACTIVE’

Bộ lọc theo phạm vi – Tìm các truy vấn kết hợp các định danh thực thể với các điều kiện phạm vi. Một truy vấn lọc bài viết theo ID người dùng và phạm vi ngày tháng chỉ ra cách cấu trúc các khóa hợp thành trong DynamoDB. Hiểu các mẫu này giúp xác định các sort keys phù hợp hỗ trợ các truy vấn phạm vi hiệu quả trong một phân vùng.

— Getting user’s recent posts

SELECT * FROM posts

WHERE user_id = ‘123’

AND created_at > DATEADD(year, -1, GETUTCDATE())

ORDER BY created_at DESC

Bộ lọc nhiều giá trị – Xem xét các điều kiện liên quan đến nhiều giá trị có thể có cho một thuộc tính, như tìm bài viết của một nhóm ID người dùng hoặc bài viết với các hashtag cụ thể. Những mẫu này ảnh hưởng đến quyết định mô hình hóa dữ liệu của bạn trong DynamoDB. Ví dụ, việc truy xuất bài viết của nhiều người dùng có thể yêu cầu các truy vấn riêng biệt sử dụng GSI với ID người dùng làm khóa phân vùng, trong khi việc tìm bài viết theo hashtag có thể được hưởng lợi từ cấu trúc chỉ mục đảo ngược, trong đó hashtag là khóa phân vùng và các ID bài viết được lưu trữ dưới dạng một tập hợp.

— Finding posts with specific hashtags

SELECT DISTINCT p.*

FROM posts p

JOIN post_hashtags ph ON p.post_id = ph.post_id

WHERE ph.hashtag IN (‘#POPULAR’, ‘#TRENDING’)

Bộ lọc giữa các thực thể – Xác định các bộ lọc trải dài qua nhiều thực thể trong các truy vấn SQL của bạn. Ví dụ, một truy vấn tìm bài viết dựa trên cả thuộc tính bài viết và thuộc tính người dùng (như vị trí người dùng hoặc loại người dùng) chỉ ra các mối quan hệ ảnh hưởng đến quyết định denormalization trong mô hình DynamoDB của bạn. Khi các bộ lọc này liên quan đến các thực thể được quản lý bởi các microservices khác nhau hoặc các thực thể không được di chuyển vào DynamoDB, hãy phân tích tác động hiệu suất của việc lọc ở phía client và truy xuất dữ liệu qua các ranh giới dịch vụ.

— Finding active user posts with high engagement

SELECT p.post_id, p.content,

FROM posts p

JOIN users u ON p.user_id = u.user_id

WHERE u.status = ‘ACTIVE’

AND p.like_count > 100

ORDER BY p.created_at DESC

Phân tích mệnh đề ORDER BY và TOP/LIMIT

Việc kiểm tra các mệnh đề ORDER BYTOP/LIMIT tiết lộ các yêu cầu sắp xếp dữ liệu và phân trang trong ứng dụng của bạn. Phân tích này giúp xác định thiết kế sort key hiệu quả trong DynamoDB. Hãy xem xét các khía cạnh sau:

  • Yêu cầu sắp xếp – Xác định các thuộc tính và sự kết hợp của các thuộc tính được sử dụng để sắp xếp dữ liệu. Ví dụ, sắp xếp bài viết theo ngày tạo để hiển thị các bài viết gần đây, hoặc theo các chỉ số tương tác cho nội dung thịnh hành. Một số truy vấn có thể yêu cầu sắp xếp kết hợp, như sắp xếp bài viết đầu tiên theo ngày và sau đó theo lượt thích trong mỗi ngày. Những mẫu này giúp xác định cấu trúc sort key phù hợp trong DynamoDB hỗ trợ khả năng sắp xếp yêu cầu của bạn.
  • Yêu cầu phân trang – Phân tích các truy vấn sử dụng mệnh đề TOP/LIMIT cùng với sắp xếp. Một truy vấn lấy bài viết gần đây nhất với giới hạn, hoặc bài viết thịnh hành nhất dựa trên mức độ tương tác, cho thấy yêu cầu phân trang. Hiểu các mẫu này giúp thiết kế các chiến lược phân trang hiệu quả bằng cách sử dụng các tính năng limitLastEvaluatedKey trong DynamoDB.

Phân tích mệnh đề GROUP BY

Việc kiểm tra các thao tác GROUP BY tiết lộ các yêu cầu tổng hợp trong ứng dụng của bạn. Phân tích này giúp xác định các chỉ số và bộ đếm cần được duy trì trong mô hình dữ liệu DynamoDB của bạn. Hãy xem xét các khía cạnh sau:

  • Mẫu tổng hợp – Xác định các thao tác nhóm và tổng hợp trong các truy vấn của bạn. Ví dụ, đếm số bài viết theo người dùng, tính tổng số lượt thích mỗi bài viết, hoặc tóm tắt các chỉ số tương tác theo loại bài viết. Hiểu các mẫu này giúp xác định các thuộc tính cần được duy trì dưới dạng các giá trị tính toán sẵn trong các mục của bạn.

— Posts count by user

SELECT user_id, COUNT(*) as total_posts

FROM posts

GROUP BY user_id

Tần suất cập nhật – Phân tích tần suất thay đổi của các giá trị tổng hợp này. Số lượt thích của bài viết được cập nhật thường xuyên khi người dùng tương tác, trong khi số bài viết của người dùng chỉ thay đổi khi họ tạo hoặc xóa bài viết. Những mẫu này giúp đánh giá các mẫu ghi và tác động của chúng đối với việc duy trì các giá trị tính toán sẵn

Phân tích sử dụng ứng dụng

Thu thập số liệu thống kê về việc sử dụng ứng dụng, bao gồm tần suất các yêu cầu HTTP mỗi giờ. Phân tích cả tầm quan trọng của doanh nghiệp và các chỉ số sử dụng với các mục tiêu sau:

  • Ưu tiên các trường hợp đặc biệt cần chú ý. Ví dụ:
    • Khi một người nổi tiếng đăng bài cập nhật, hệ thống có thể phải gửi bài đó tới hàng triệu người theo dõi ngay lập tức.
    • Các bài viết viral có thể nhận được một lượng lớn lượt thích và bình luận trong vòng vài phút.
  • Xác định các module chính cần di chuyển.
    Phương pháp dựa trên dữ liệu này đảm bảo rằng các phần quan trọng và được sử dụng thường xuyên nhất của ứng dụng được ưu tiên trong quá trình di chuyển, tối ưu hóa việc phân bổ tài nguyên và giảm thiểu sự gián đoạn có thể xảy ra đối với các chức năng kinh doanh cốt lõi.

Phân tích kích thước hàng trung bình, tỷ lệ đọc-ghi và tốc độ tăng trưởng dự kiến của các bảng với các mục tiêu sau:

  • Xác định phương pháp tối ưu để xây dựng các mối quan hệ thực thể, ví dụ, chọn giữa chiến lược mục đơn hoặc phân vùng theo chiều dọc.
  • Ước tính chính xác và phân bổ dung lượng đọc và ghi.

Kết luận

Thông qua việc phân tích cấu trúc cơ sở dữ liệu hiện tại, các mẫu truy cập và các chỉ số sử dụng, bạn có thể xây dựng một nền tảng vững chắc cho việc di chuyển sang DynamoDB. Hiểu biết này giúp định hình giai đoạn tiếp theo—thiết kế mô hình dữ liệu DynamoDB, mà chúng ta sẽ khám phá trong phần 2 của chuỗi bài viết này. Theo đuổi phương pháp có cấu trúc này giúp đảm bảo chiến lược di chuyển của bạn phù hợp với cả nhu cầu hiện tại và yêu cầu khả năng mở rộng trong tương lai.


About the authors

Ramana Kiran Mannava

Ramana Kiran Mannava

Ramana là một Lead Consultant tại AWS Professional Services, với chuyên môn trong việc hiện đại hóa các tải công việc .NET và xây dựng các giải pháp dựa trên đám mây trên AWS. Ông cũng đam mê các công nghệ cơ sở dữ liệu và tối ưu hóa truy vấn.

Akber Rizwan Shaik

Akber Rizwan Shaik

Akber là một Lead Consultant tại AWS Professional Services. Ông giúp khách hàng di chuyển và hiện đại hóa các tải công việc .NET của họ lên AWS với các giải pháp dựa trên đám mây.

Mahesh Kumar Vemula

Mahesh Kumar Vemula

Mahesh là một Lead Consultant tại AWS Professional Services. Ông là một người đam mê Serverless, giúp khách hàng hiện đại hóa các tải công việc .NET của họ với các giải pháp dựa trên đám mây.