Giới Thiệu Về DynamoDB
DynamoDB là dịch vụ cơ sở dữ liệu NoSQL serverless dạng key-value độc quyền của AWS, nổi bật với tốc độ truy xuất dữ liệu nhanh chóng và khả năng mở rộng linh hoạt. Dịch vụ này được thiết kế để phục vụ cho các ứng dụng yêu cầu hiệu suất cao trên mọi quy mô. Các tính năng nổi bật của DynamoDB bao gồm:
- API đơn giản: Gồm các lệnh Get, Put, Query và Scan trên các bảng chỉ định.
- Quản lý hoàn toàn bởi AWS: Người dùng chỉ cần thiết lập khóa (key) và xác định lưu lượng (provisioned throughput) cần thiết, trong khi các tác vụ quản trị khác sẽ do AWS xử lý.
- Khả năng xử lý tải lớn: Hỗ trợ hàng triệu yêu cầu mỗi giây và có khả năng tự động mở rộng để xử lý khối lượng công việc lớn.
DynamoDB cũng nằm trong danh sách các dịch vụ miễn phí trong gói Free Tier của AWS, với điều kiện lưu lượng giới hạn như: 25GB dung lượng lưu trữ, 25 WCU/RCU, tương đương khoảng 200 triệu yêu cầu mỗi tháng. Đây là đủ cho việc phát triển và thử nghiệm ứng dụng. Tuy nhiên, nếu bạn muốn sử dụng DynamoDB trực tiếp trên máy tính của mình để không phụ thuộc vào kết nối Internet, thì DynamoDB Local là lựa chọn lý tưởng.
Cài Đặt DynamoDB Local
Giới Thiệu
AWS cung cấp DynamoDB Local dưới dạng Docker image có tên dynamodb-local
, cho phép bạn cài đặt nhanh chóng chỉ với một câu lệnh:
bash
docker run -p 8000:8000 amazon/dynamodb-local
Bạn cũng có thể cài đặt bằng docker-compose để triển khai cùng các ứng dụng khác:
yaml
version: '3.8'
services:
dynamodb-local:
command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data"
image: "amazon/dynamodb-local:latest"
container_name: dynamodb-local
ports:
- "8000:8000"
volumes:
- "./docker/dynamodb:/home/dynamodblocal/data"
working_dir: /home/dynamodblocal
DynamoDB Local cung cấp bộ API tương tự như dịch vụ DynamoDB trên web. Do đó, khi tương tác, bạn chỉ cần thay đổi endpoint-url.
Ví dụ, để tạo bảng trên DynamoDB Local bằng AWS CLI, bạn có thể thực hiện với câu lệnh sau:
bash
aws dynamodb create-table \
--table-name orders_table \
--attribute-definitions AttributeName=orderId,AttributeType=S \
--key-schema AttributeName=orderId,KeyType=HASH \
--billing-mode PAY_PER_REQUEST \
--endpoint-url http://localhost:8000
Tại đây, --endpoint-url
được chỉ đến container đang chạy DynamoDB Local.
Người dùng còn có thể tương tác với DynamoDB Local thông qua các SDK. Ví dụ, với AWS SDK cho Python, bạn có thể nhập dữ liệu vào bảng vừa tạo với đoạn mã sau:
python
import boto3, time, datetime
from botocore.config import Config
# Cấu hình endpoint_url trỏ về http://localhost:8000
dynamodb = boto3.resource('dynamodb',config=Config(retries={'mode':'adaptive','total_max_attempts': 10}), endpoint_url='http://localhost:8000')
start_time=time.time()
try:
for k in range(0,1000):
r=dynamodb.Table('orders_table').put_item(Item={'orderId':f"o-{k:08}",'seconds':int(time.time()-start_time),'timestamp':datetime.datetime.now().isoformat()})
except Exception as e:
print(str(e))
end_time=time.time()
print(f"Last: %s\n\n===> Total: %d seconds, %d keys %d items/second\n"%(r,(end_time-start_time),k,k/(end_time-start_time)))
Để truy vấn dữ liệu đã tạo bằng AWS CLI, bạn có thể sử dụng lệnh sau:
bash
aws dynamodb --endpoint-url http://localhost:8000 \
scan --table-name orders_table \
--select=COUNT \
--return-consumed-capacity TOTAL
Điểm Khác Biệt So Với Dịch Vụ AWS DynamoDB
DynamoDB Local có một số đặc điểm khác biệt so với dịch vụ DynamoDB trên web, bao gồm:
- Bỏ qua cấu hình lưu lượng: DynamoDB Local không giới hạn lưu lượng (Provisioned throughput), mà chỉ giới hạn bởi hiệu năng máy tính của bạn.
- Thực hiện lệnh scan tuần tự: Lệnh
scan
được thực hiện tuần tự, không hỗ trợparallel scans
, do đó tốc độ scan sẽ chậm hơn. - Giới hạn 1MB cho mỗi kết quả: DynamoDB duy trì giới hạn 1MB cho mỗi kết quả trả về. Tuy nhiên, trong DynamoDB Local, dung lượng này bao gồm cả khóa và các thuộc tính đã chọn.
- Không có tính năng partition: DynamoDB Local không hỗ trợ phân vùng.
- Tên bảng không phân biệt chữ hoa chữ thường: Tên bảng trong DynamoDB Local là không phân biệt (case insensitive).
Sử Dụng NoSQL Trên SQLite
DynamoDB Local được xây dựng dựa trên SQLite với ngôn ngữ Java. Nếu bạn cài đặt DynamoDB Local với tùy chọn -sharedDb
khi sử dụng docker-compose, file cơ sở dữ liệu có tên shared-local-instance.db sẽ được tạo trong thư mục đã mount, cụ thể là ./docker/dynamodb
. Đây chính là file cơ sở dữ liệu cho SQLite mà người dùng có thể sử dụng với các công cụ Database Client như Dbeaver để kết nối trực tiếp.
Cách này giúp bạn dễ dàng kiểm tra và gỡ lỗi dữ liệu nhanh hơn so với việc sử dụng API của DynamoDB Local.
Câu hỏi được đặt ra là tại sao AWS lại chọn cơ sở dữ liệu quan hệ như SQLite để phát triển DynamoDB Local? Mình sẽ cố gắng giải đáp trong các bài viết tiếp theo.
Kết Luận
Bài viết này đã giới thiệu sơ lược về DynamoDB và các bước để cài đặt DynamoDB Local trên máy tính cá nhân của bạn. Mong rằng thông tin trong bài viết sẽ có ích cho quá trình phát triển phần mềm của bạn. Nếu bạn thấy nội dung này hữu ích, hãy nhớ chia sẻ và ủng hộ tác giả để có thêm động lực viết bài nhé!
source: viblo