2012-07-12 27 views
5

Sau khi xem Amazon DynamoDB, tôi đã cố gắng tìm ra cách lưu trữ các đối tượng phức tạp mà tôi tạo ra trong mã của mình và muốn tồn tại. Tôi hiểu làm thế nào tôi sẽ lưu trữ các đối tượng này trong một cơ sở dữ liệu quan hệ như MySql nhưng làm thế nào tôi sẽ lưu trữ chúng trong DynamoDB?Có nên lưu trữ một đối tượng trong Amazon Dynamo là Json không?

Tôi có thể nghĩ ra một cách .... biến chúng thành Json và lưu trữ biểu diễn Json của đối tượng trong DynamoDB. Để đưa chúng ra khỏi DynamoDB một lần nữa, tôi sẽ sắp xếp lại chúng từ Json để biểu diễn Object của tôi trong mã của tôi.

Dưới đây là một ví dụ:

Đối với loại đối tượng: A Car có một động cơ nào có nhiều Parts. Mỗi phần có một số sê-ri, một vòng đời và một giá trị thay thế. Bây giờ tôi có thể biến xe thành json đó sẽ giống như thế này:

{ 
    "engine": { 
     "parts": [ 
      { 
       "serialNumber": "1234", 
       "lifeSpan": 10, 
       "replacementValue": 100 
      }, 
      { 
       "serialNumber": "5678", 
       "lifeSpan": 1, 
       "replacementValue": 200 
      } 
     ] 
    } 
} 

Nên tôi chỉ lưu trữ trên Json trong Dynamo như chính: CarName 'Jaguar', giá trị gia tăng [trên json]? Hoặc là có một cách tốt hơn để lưu trữ các đối tượng xe?

Trả lời

1

Tôi hiểu cách lưu trữ các đối tượng này trong Cơ sở dữ liệu quan hệ như MySql nhưng làm cách nào để lưu trữ chúng trong DynamoDB?

Các giải pháp chủ đạo cho DynamoDB là khá giống với MySql một: bạn chỉ cần, thay đổi một dòng của bảng (mysql) với một mục bảng (dynamodb), cả hai đều là những cấu trúc phẳng, nhưng một mục dynamodb thể có các thuộc tính khác nhau từ các mục khác trong bảng và có 64KB item size limit (bao gồm tên cột/thuộc tính).

Tôi có nên lưu trữ Json ở trên trong Dynamo là Key: CarName 'Jaguar', Giá trị [ở trên json] không? Hoặc là có một cách tốt hơn để lưu trữ các đối tượng xe?

Không, khi mảng mảng phát triển, bạn sẽ phải đối mặt với 64KB item size limit. Bạn có thể lưu trữ một phiên bản nén của json để giảm thiểu, nhưng sau đó bạn sẽ không thể sử dụng bất kỳ tính năng thuộc tính nào (ví dụ: LSI hoặc GSI, updateItem) trong dynamodb, cũng như không tích hợp liền mạch với các sản phẩm AWS khác.

Bạn có thể xem xét cách dyngodb lưu trữ các đối tượng đó, ngay: một mục dynamodb, cho mọi đối tượng. Một băm cho mảng, với N phạm vi cho các phần tử mảng.

+1

Giới hạn kích thước mục hiện đã tăng lên 400 KB –

0

Bạn có thể thử sử dụng một chuỗi các chuỗi/chuỗi. Bằng cách đó bạn có thể đẩy vào nhiều mục một, tiếc là bạn không thể yêu cầu chỉ một mục, bạn cần phải có được tất cả. Một tùy chọn khác là một mảng serialized (nếu bạn đang sử dụng php) để biến một mảng php tốt đẹp thành một chuỗi để lưu trữ trong DB.

0

Giới hạn kích thước mục đã lên đến 400kb.

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html

Vì vậy, tôi không nghĩ rằng giới hạn kích thước mục phải là vấn đề lớn bây giờ.

Tuy nhiên, vấn đề liên quan đến tích hợp với dịch vụ AWS khác vẫn tồn tại. Ví dụ tôi khá chắc chắn bạn không thể sử dụng cloudearch trên các trường được ánh xạ json này.Đặc biệt, xem xét bạn có thể lưu trữ con trỏ đến một đối tượng S3 làm dữ liệu trường nếu dữ liệu quá lớn.

Tôi đã sử dụng loại bản đồ trong máy phát điện một chút và nó khá tiện dụng/sạch so với việc lưu trữ tất cả dữ liệu trong các trường nếu bạn có thể sống với các giới hạn mới. Nếu bạn đang sử dụng nút/javascript thư viện datatypes dynampdb là rất quan trọng để có được công cụ này chơi tốt đẹp.

https://www.npmjs.com/package/dynamodb-data-types

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