Trong bài học này, bạn sẽ tìm hiểu một số ví dụ đơn giản về việc chèn và truy xuất dữ liệu bằng DynamoDB. Bạn tạo bảng DynamoDB bằng API CreateTable, rồi bạn chèn một số mục bằng lệnh gọi API BatchWriteItem. Cuối cùng, bạn sẽ truy xuất các mục riêng lẻ bằng lệnh gọi API GetItem. Trước khi bạn thực hiện các ví dụ này, chúng ta sẽ thảo luận về mô hình dữ liệu sẽ được sử dụng trong ứng dụng hiệu sách trực tuyến mẫu của bạn.

Trong các mô-đun tiếp theo, bạn sẽ tìm hiểu cách truy xuất nhiều mục cùng một lúc bằng lệnh gọi API Query và cách kích hoạt các mẫu hình truy vấn bổ sung bằng cách sử dụng chỉ mục phụ. Bạn cũng sẽ biết cách cập nhật các mục hiện có trong bảng của mình.

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


Các khái niệm DynamoDB sau đây đóng vai trò chính trong mô-đun này:

  • Bảng: Một tập hợp bản ghi dữ liệu của DynamoDB.
  • Mục: Một bản ghi dữ liệu đơn lẻ trong bảng DynamoDB. Có thể so sánh bản ghi với một hàng trong cơ sở dữ liệu quan hệ.
  • Thuộc tính: Một yếu tố dữ liệu đơn lẻ trên một mục. Có thể so sánh thuộc tính với một cột trong cơ sở dữ liệu quan hệ. Tuy nhiên, không giống như các cột trong cơ sở dữ liệu quan hệ, các thuộc tính không cần được chỉ định khi tạo bảng, ngoài khóa chính sẽ được thảo luận sau trong mô-đun này. Thuộc tính có thể là các loại đơn giản như chuỗi, số nguyên hoặc Boolean hay các loại phức tạp như danh sách hoặc bản đồ.
  • Khóa chính: Khóa chính là mã định danh duy nhất cho một mục duy nhất trong bảng DynamoDB. Tên và loại khóa chính phải được chỉ định khi tạo bảng và khóa chính của loại được chỉ định phải được bao gồm trong mỗi mục được ghi vào bảng. Khóa chính đơn giản bao gồm một thuộc tính duy nhất còn khóa chính tổng hợp bao gồm hai thuộc tính: khóa phân vùng và khóa sắp xếp. Ví dụ: Bạn có thể tạo một khóa chính đơn giản bằng cách sử dụng “UserID” làm mã định danh hoặc tạo một khóa chính tổng hợp bằng cách kết hợp “UserID” và “Creation_Date” làm mã định danh mục.

Khi xây dựng một ứng dụng, bạn phải luôn dành thời gian để thiết kế các mô hình dữ liệu cần thiết trong logic ứng dụng của bạn. Thiết kế mô hình dữ liệu này nên cân nhắc các nhu cầu truy cập dữ liệu sẽ cần trong ứng dụng của bạn, dành cho cả việc đọc và ghi dữ liệu.

DynamoDB là cơ sở dữ liệu phi quan hệ. Với cơ sở dữ liệu phi quan hệ, bạn không cần chỉ định trước toàn bộ sơ đồ khi tạo bảng. Bạn chỉ cần khai báo khóa chính cho bảng của mình, khóa này sẽ xác định duy nhất từng bản ghi trong bảng của bạn. Điều này giúp giảm chi phí trả trước khi thiết kế mô hình dữ liệu vì bạn có thể dễ dàng sửa đổi sơ đồ khi nhu cầu của ứng dụng thay đổi.

Như đã đề cập trong phần “Nền tảng ứng dụng” thuộc phần “Giới thiệu” trong hướng dẫn này, ứng dụng của bạn cần truy xuất một cuốn sách riêng lẻ theo tiêu đề và tác giả. Vì sự kết hợp giữa tiêu đề và tác giả là mã định danh duy nhất của một cuốn sách, bạn có thể sử dụng các thuộc tính đó làm khóa chính của bảng. Ứng dụng của bạn cũng cần lưu trữ thông tin về thể loại của cuốn sách, chẳng hạn như lịch sử hoặc tiểu sử, cũng như các định dạng có sẵn của sách — bìa cứng, bìa mềm hay sách nói — được tham chiếu tới số mặt hàng trong hệ thống hàng lưu kho của bạn.

Với những nhu cầu này, bạn có thể sử dụng sơ đồ sau cho bảng của mình:

  • Tiêu đề (một chuỗi): Tiêu đề của cuốn sách
  • Tác giả (một chuỗi): Tác giả của cuốn sách
  • Thể loại (một chuỗi) Thể loại của cuốn sách, chẳng hạn như Lịch sử, Tiểu sử và Khoa học viễn tưởng
  • Các định dạng (bản đồ): Các định dạng khác nhau mà bạn có sẵn để bán (như bìa cứng, bìa mềm và sách nói) và số mặt hàng thuộc mỗi định dạng trong hệ thống hàng lưu kho của bạn

Trong các bước sau, bạn tạo bảng bằng cách chỉ định khóa chính tổng hợp (Author Title) của bảng. Sau đó, bạn tải một số mục vào bảng của bạn và đọc các mục riêng lẻ từ bảng.


  • Bước 1. Tạo bảng DynamoDB

    Thư mục bạn đã tải xuống chứa tập lệnh create_table.py. Tập lệnh này tạo bảng Books bằng API CreateTable. Bạn có thể chạy tập lệnh này bằng cách nhập lệnh sau vào thiết bị đầu cuối AWS Cloud9.

    $ python create_table.py

    Nếu bạn mở tập lệnh create_table.py bằng trình biên tập AWS Cloud9, bạn sẽ thấy:

    • Tập lệnh chỉ định khóa chính tổng hợp cho bảng của bạn với đối số KeySchema trong lệnh gọi API CreateTable. Bảng của bạn sử dụng Author làm khóa hash và Title làm khóa range.
    • Tập lệnh chỉ định thông lượng cung cấp cho bảng của bạn bằng cách xác định cả đơn vị dung lượng đọc và đơn vị dung lượng ghi. DynamoDB cho phép bạn thiết lập dung lượng đọc và ghi riêng biệt, nhờ đó bạn tinh chỉnh được cấu hình để đáp ứng nhu cầu của ứng dụng mà không phải trả chi phí quá cao.
  • Bước 2. Tải các mục vào bảng

    Trong bước này, bạn tải một số cuốn sách vào bảng. Trong thiết bị đầu cuối AWS Cloud9, chạy lệnh sau.
    $ python insert_items.py
    Lệnh này chạy tập lệnh sau.
    import boto3
    
    dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
    table = dynamodb.Table('Books')
    
    with table.batch_writer() as batch:
        batch.put_item(Item={"Author": "John Grisham", "Title": "The Rainmaker",
            "Category": "Suspense", "Formats": { "Hardcover": "J4SUKVGU", "Paperback": "D7YF4FCX" } })
        batch.put_item(Item={"Author": "John Grisham", "Title": "The Firm",
            "Category": "Suspense", "Formats": { "Hardcover": "Q7QWE3U2",
            "Paperback": "ZVZAYY4F", "Audiobook": "DJ9KS9NM" } })
        batch.put_item(Item={"Author": "James Patterson", "Title": "Along Came a Spider",
            "Category": "Suspense", "Formats": { "Hardcover": "C9NR6RJ7",
            "Paperback": "37JVGDZG", "Audiobook": "6348WX3U" } })
        batch.put_item(Item={"Author": "Dr. Seuss", "Title": "Green Eggs and Ham",
            "Category": "Children", "Formats": { "Hardcover": "GVJZQ7JK",
            "Paperback": "A4TFUR98", "Audiobook": "XWMGHW96" } })
        batch.put_item(Item={"Author": "William Shakespeare", "Title": "Hamlet",
            "Category": "Drama", "Formats": { "Hardcover": "GVJZQ7JK",
            "Paperback": "A4TFUR98", "Audiobook": "XWMGHW96" } })
    

    Như tập lệnh trước hiển thị, bạn đã sử dụng API BatchWriteItem để tải năm cuốn sách vào bảng. Mỗi cuốn sách bao gồm các thuộc tính Author Title làm khóa chính và các thuộc tính Category Formats làm thông tin thêm về sách. Mỗi thuộc tính có một loại, có thể là loại đơn giản như chuỗi cho thuộc tính Category hay loại phức tạp như bản đồ cho thuộc tính Formats.

    Lưu ý rằng bạn đã chèn dữ liệu qua API HTTP bằng thư viện máy khách Boto 3. Tất cả các yêu cầu truy cập và thao tác dữ liệu được thực hiện thông qua các yêu cầu HTTP, thay vì duy trì kết nối liên tục đến cơ sở dữ liệu như thông thường đối với các hệ thống quản lý cơ sở dữ liệu quan hệ.

  • Bước 3. Truy xuất các mục từ bảng

    Bạn có thể truy xuất một cuốn sách đơn lẻ bằng yêu cầu API GetItem và chỉ định khóa chính của mục bạn muốn.

    Trong thiết bị đầu cuối AWS Cloud9, chạy lệnh sau.

    $ python get_item.py

    Lệnh này chạy tập lệnh sau để truy xuất một mục đơn lẻ, đó là cuốn sáchThe RainMaker của John Grisham.

    import boto3
    
    dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
    table = dynamodb.Table('Books')
    
    resp = table.get_item(Key={"Author": "John Grisham", "Title": "The Rainmaker"})
    
    print(resp['Item'])

    Thiết bị đầu cuối của bạn sẽ in ra toàn bộ dữ liệu sách được truy xuất từ bảng.

    $ python get_item.py
    {'Title': 'The Rainmaker', 'Formats': {'Hardcover': 'J4SUKVGU', 'Paperback': 'D7YF4FCX'}, 'Author': 'John Grisham', 'Category': 'Suspense'}

    Vì mỗi mục trong một bảng được xác định duy nhất bởi khóa chính nên lệnh gọi API GetItem sẽ luôn trả về tối đa một mục từ bảng của bạn.


    Trong mô-đun tiếp theo, bạn tìm hiểu cách truy xuất nhiều mục từ bảng DynamoDB bằng một lệnh gọi API duy nhất. Bạn cũng tìm hiểu cách kích hoạt nhiều mẫu hình truy cập dữ liệu trong bảng của mình bằng cách sử dụng các chỉ mục phụ.