2010-08-07 20 views
21

Cách được khuyến nghị để thực hiện một cơ chế khóa đơn giản được sử dụng kết hợp với S3 là gì?Khóa với S3

Ví dụ về những gì tôi muốn làm: khóa

  • có được bằng cách đối tượng id
  • đối tượng đọc từ S3
  • sửa đổi dữ liệu
  • ghi đối tượng để S3
  • khóa phát hành

Lý tưởng nhất là tìm kiếm cơ chế khóa dựa trên đám mây. Tôi có thể sử dụng memcached tại địa phương, nhưng sau đó tôi phải đối phó với việc mở rộng quy mô đó. Tôi không thấy một cách rõ ràng để thực hiện khóa nhẹ với bất kỳ API AWS, nhưng nó có vẻ giống như một vấn đề phổ biến.

Tôi tự hỏi liệu bạn có thể sử dụng SimpleDB để thực hiện thao tác khóa có nguyên tử hay không. Có ai đã thử điều đó không?

Trả lời

10

Ok, tôi đã dành một chút thời gian sáng nay chơi với boto và tôi nghĩ rằng tôi có một giải pháp hoạt động bằng SimpleDB. Bạn cần bản phát hành boto mới nhất để các điều kiện đặt và các lần đọc nhất quán được hỗ trợ.

Ví dụ mã ở đây: http://pastebin.com/3XzhPqfY

Xin vui lòng gửi ý kiến ​​/ gợi ý. Tôi tin rằng mã này nên được khá an toàn - thử nghiệm của tôi trong main() thử nó với 10 chủ đề.

Một điều tôi chưa giải quyết là S3 lần đọc không nhất quán (phải không?), Vì vậy trong lý thuyết một luồng có thể hoạt động trên một bản sao cũ của giá trị S3. Dường như có thể có một cách giải quyết cho rằng như đã mô tả ở đây:

http://www.shlomoswidler.com/2009/12/read-after-write-consistency-in-amazon.html

+0

SimpleDB dường như không còn được dùng nữa; nó rơi khỏi bảng điều khiển AWS và không được liệt kê trong số 'Dịch vụ và Giải pháp' của họ nữa. Có một triển khai sử dụng DynamoDB? :) – pjz

2

tôi không nghĩ rằng bạn có thể làm điều này chỉ sử dụng S3, sử dụng tăng cường tính nhất quán SimpleDB như james nói được một cách tốt mà làm việc

bạn có thể tìm kiếm một số ví dụ ở đây: Amazon SimpleDB Consistency Enhancements

cách tiếp cận khác mà có thể là tốt đang sử dụng versioning feature của S3
nên về cơ bản, lưu trữ một cặp đối tượng id id/phiên bản trong SimpleDB như hầu hết các "hợp lệ" versi trên
và đảm bảo rằng tất cả các yêu cầu GET sẽ truy xuất phiên bản
sau khi PUT thành công của đối tượng được sửa đổi, cập nhật id phiên bản trong DB

theo cách này bạn cũng có thể sử dụng khả năng truy xuất phiên bản trước của đối tượng để khôi phục Nếu cần thiết.

Các vấn đề liên quan