Giới thiệu về DynamoDB (Phần 1)

Chúng tôi rất vui mừng chia sẻ kiến thức sâu sắc về từ khóa Dynamodb la gi để tối ưu hóa nội dung trang web và chiến dịch tiếp thị trực tuyến. Bài viết cung cấp phương pháp tìm kiếm, phân tích và lựa chọn từ khóa phù hợp, cùng với chiến lược và công cụ hữu ích. Hy vọng thông tin này sẽ giúp bạn xây dựng chiến lược thành công và thu hút lưu lượng người dùng. Cảm ơn sự quan tâm và hãy tiếp tục theo dõi blog để cập nhật kiến thức mới nhất.

rsz_massive-message-processing-with-amazon-sqs-and-amazon-dynamodb-arc301-aws-reinvent-2013-20-638.jpg

Bạn Đang Xem: Giới thiệu về DynamoDB (Phần 1)

Giới thiệu

  • DynamoDB là môt dịch vụ quản lý NoSQL có khả năng đáp ứng hiệu suất cao và nhanh kèm theo khả năng mở rộng. Nếu như bạn là một nhà phát triển, bạn cũng có thể sử dụng DynamoDB để tạo ra một bảng có khả năng lưu trữ và truy xuất bất kỳ số lượng tài liệu, mà vẫn có thể phục vụ cho bất kỳ mức độ request traffic.

  • DynamoDB tự động hóa phân tán tài liệu và traffic của một bảng ra một số lượng server vừa đủ để sở hữu thể xử lý request capacity nêu lên bơi khách hàng và lượng tài liệu lưu trữ, và song song đảm bảo hiệu suất nhanh và đồng nhất. Tất cả dự liệu được lưu trữ trên SSD và tự động hóa được sao chép ra các vùng sẵn sằng (Availability Zones) trong một khu vực (Region) để cung Lever sẵn sàng cao và độ bền của tài liệu (high availablity and data durability)

  • Nếu như bạn là một nhà quản lý tài liệu, bạn cũng có thể tạo một bảng tài liệu mới, mở rộng hay thu hẹp request capacity mà không bị giảm hiệu suất, và có thể thây được những thông số qua AWS Management Console. Với DynamoDB, bạn cũng có thể phó thác gánh nặng quản lý và mở rộng tài liệu cho AWS và không phải lo lắng về việc cung cấp hardware, thiết lập và tùy chỉnh thiết lập, sao chép tài liệu.

Thao tác với DynamoDB

1. Bảng trong DynamoDB

  • Khi chúng ta tạo một bảng trong Amazon DynamoBD, bạn cần phải cung cấp tên bảng (dĩ nhiên rồi) (haha), primary key và giá trị read write throughput. Mỗi item trong bảng có thể có bao nhiêu attributes tùy ý, tuy nhiên có giới hạn 400KB cho dung tích một item.
  • Chỉ định Primary Key: Khi tạo một bảng, thì ngoài việc khai báo tên bảng bạn cần phải chỉ rõ primary key . Primary key để đảm nói rằng không có hai items nào trong bảng có cùng primary key. DynamoDB tương trợ hai loại primary key sau:
    • Hash Primary Key: Chỉ việc một attribute để tạo ra primary key. DynamoDB xây dựng hash index không được sắp xếp cho primary key attribute.
    • Hash và Range Primary Key: Cần 2 attributes để tạo ra primary key. Attribute đầu tiền là hash attribute và attribute sót lại là range attribute. DynamoDB xây dựng hash index không được sắp xếp cho hash attribute và range index được sắp xếp cho range attribute. Mỗi item được định danh bởi cặp primary key này. Điều này được chấp nhận 2 items có cùng hash attribute nhưng khác range attribute cùng tồn tại trong một bảng.
  • Trong quá trình tạo bảng, bạn chỉ rõ mức têu thụ (throughput) yêu cầu theo đơn vị là capacity unit. Bạn cũng có thể thay đổi (tăng hoặc giảm) chỉ số này qua UpdateTable request
    • Strongly consistent: đảm bảo tài liệu lấy ra là tài liệu tiên tiến nhất
    • Eventually consistent: đảm nói rằng sau này tài liệu sẽ đồng bộ hết trên phân vùng nhưng không đảm bảo dự liệu trả về vào trong 1 thời khắc nhất định là tiên tiến nhất
    • Read capacity unit – Số lượng phản ánh số lượng đọc strongly consitent của rất nhiều item không thực sự 4KB
    • Write capacity unit – Số lượng những lần ghi có dung tích 1KB mỗi giây. Có nghĩa rằng nếu khách hàng yêu cầu 10 write capacity units là bạn đang yêu thương cầu mức tiêu thụ 10 writes với dung tích 1 KB mỗi giây của bảng đó

DynamoDB sử dụng những capacity unit này để cung cấp tài nguyên đầy đủ cho lượng tiêu thụ yêu cầu.

Một strongly consistent read tương đương 2 evenly consitent read. Xem bảng sau để hiểu hơn

2. Read/Write capacity

  • Nếu như bạn không sử dụng #batch_get_item thì không thể nhóm các item cho một lần đọc tài liệu. Ví dụ:

    Các bạn sẽ phải mất 10 lần đọc cho 10 item có dung tích 3KB (tự động hóa làm tròn đến 4KB) nếu sử dụng #get_item nhưng nếu sử dụng #batch_get_item thì sẽ lấy tổng số dung tích của 10 item và chia cho 4KB, ở đây sẽ là 3KB x 10 / 4KB làm tròn là 8 reads

  • Tương tự với write thì cũng đều có hai hàm để ghi là #put_item và #batch_write_item nhưng 1 write chỉ nhận 1KB tài liệu.

3. Secondary index

Xem Thêm : Bản dupe là gì, các bản dupe đình đám nhất hiện nay

Để hỗ trợ cho việc truy cập tài liệu, Amazon DynamoDB tạo và quản lý index cho primary key. Việc này hỗ trợ cho mạng lưới hệ thống truy cập tài liệu khá nhanh khi chỉ định primary key. Tuy nhiên, nhiều mạng lưới hệ thống có nhẽ sẽ hưởng lợi từ việc có một hoặc hai key thay thế (alternate). Để tăng tốc độ truy cập bạn cũng có thể tạo ra secondary index.

Một secondary index là một cấu trúc tài liệu chứa tập con của rất nhiều attributes trong một bảng, cùng với một key thay thế để tương trợ cho Query operation. Với một secondary index, các query sẽ không còn bị giới hạn khi chỉ sử dụng được primary key; bạn cũng có thể truy vấn tài liệu bằng việc sử dụng key thay thế từ secondary index. Một bảng có thể có nhiều secondary index để tương trợ cho nhiều query pattern.

DynamoDB tương trợ hai loại index:

  • Global secondary index: một loại index có hash và range key khác với hash và range key từ bảng gốc.
  • Local secondary index: một loại index mà có hash key trùng với hash key từ bảng gốc và range key là một attribute khác.

4. Query/Scan

  • Query:
    • Để thực hiện một query operation bạn cần phải có primary key và không bắt buộc kèm theo tham dự cho range key. Query có thể thực hiện trên một bảng hoặc secondary index.

      Lưu ý rằng: tham dự so sánh không thực hiện trên hash key được.

    • Range key phải được thực hiện so sánh như sau:

a = b — true if the attribute a is equal to the value b a < b — true if a is less than b a <= b — true if a is less than or equal to b a > b — true if a is greater than b a >= b — true if a is greater than or equal to b a BETWEEN b AND c — true if a is greater than or equal to b, and less than or equal to c.

  • Tất cả item được trả về sẽ tiến hành tính chung là một trong query operation, có tức là với 100 1KB item thì bạn chỉ có 100 x 1KB / 4KB = 25 reads thay vì 100 reads (yeah)
  • Scan:
  • Một scan operation có thể thực hiển trên cả bảng và secondary index. Giá trị trả về mặc định của một scan operation là toàn bộ tài liệu (sohai). Vì vậy hãy thận trọng khi sử dụng scan.

Một số lưu ý về Scan và Query:

  • Cả hai operation đều phải có dung tích trả về tối đa là 1MB.
  • Query tương trợ strongly consistenteventually consistent trong những khi đó Scan chỉ tương trợ eventually consistent
  • Hãy tránh việc Scan một bảng hoặc index có dung tích lớn.
  • Theo thời kì dung tích tăng lên thì Scan operation sẽ càng chậm

Dynamodb local

Nếu như không muốn đăng ký sử dụng DynamoDB bạn cũng có thể sử dụng dynamodb-local để phát triển ứng dụng. Thêm vào Gemfile:

gem “dynamodb-local”

Xem Thêm : Hành vi khách hàng là gì? Bí kíp nắm bắt tâm lý khách hàng hiệu quả

Nên sử dụng Aws-sdk v2 để phát triển (yeah) Sau đó mở dynamodb-local bằng terminal

dynamodb-local

Tiếp đến là config để Aws-sdk kết nối tới dynamodb-local

Tạo một file config đặt trong initializers

#config/initializers/ Aws.config.update({ access_key_id: x, secret_access_key: y, region: “localhost”, dynamodb: { endpoint: “localhost:8000” } })

Giờ đến việc tạo bảng: Tất cả chúng ta sẽ sử dụng #create_table của Dynamodb client trong Aws sdk

#create_table.rb def create_table dynamodb = Aws::DynamoDB::Client.new table_name = “users” dynamodb.create_table( table_name: table_name, attribute_definitions: [ { attribute_name: :user_id, attribute_type: :S, }, { attribute_name: :city, attribute_type: :S } ], key_schema: [ { attribute_name: :user_id, key_type: :HASH }, { attribute_name: :city, key_type: :RANGE } ], provisioned_throughput: { read_capacity_units: 10, write_capacity_units: 10 } ) end

Bảng tạo ra mang tên là users cùng với:

  • hash key là user_id và loại tài liệu là String
  • range key là city và loại tài liệu là String
  • các chỉ số throughput là 10 reads/s và 10 writes/s

Đến đây là kết thúc phần 1. Phần tới mình sẽ chia sẽ các best practices khi thao tác làm việc với dynamodb (yeah)

References

[1] http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html [2] http://docs.aws.amazon.com/sdkforruby/api/Aws/DynamoDB/Client.html

You May Also Like

About the Author: v1000