2013-08-13 34 views
9

Tôi muốn lưu trữ 1M + chuỗi thời gian khác nhau trong cơ sở dữ liệu DynamoDb của Amazon. Mỗi chuỗi thời gian sẽ có khoảng 50K điểm dữ liệu. Điểm dữ liệu bao gồm dấu thời gian và giá trị.Lưu trữ chuỗi thời gian trong AWS DynamoDb

Ứng dụng sẽ thêm các điểm dữ liệu mới vào chuỗi thời gian thường xuyên (mọi lúc) và sẽ truy xuất (thường là toàn bộ chuỗi thời gian) theo chuỗi thời gian để phân tích.

Tôi nên cấu trúc cơ sở dữ liệu như thế nào? Tôi có nên tạo một bảng riêng cho từng thời gian không? Hay tôi nên đặt tất cả các điểm dữ liệu trong một bảng?

+4

Bạn đã sử dụng kết thúc bằng cách nào? – Hugo

+3

bạn đã sử dụng thiết kế nào? – Narayan

Trả lời

12

Giả sử dữ liệu của bạn là không thay đổi và có kích thước, bạn có thể muốn xem xét Amazon Redshift; nó được viết cho các giải pháp báo cáo có kích thước petabyte.

Trong Dynamo, tôi có thể nghĩ ra một vài thiết kế khả thi. Trong lần đầu tiên, bạn có thể sử dụng một bảng, với một khóa băm/dãy phức hợp (cả hai chuỗi). Khóa băm sẽ là tên chuỗi thời gian, phím phạm vi sẽ là dấu thời gian là chuỗi ISO8601 (có thuộc tính dễ chịu khi sắp xếp theo thứ tự bảng chữ cái cũng là thứ tự thời gian) và sẽ có thuộc tính phụ trên mỗi mục; một giá trị'. Điều này cho bạn khả năng chọn tất cả mọi thứ từ một chuỗi thời gian (Truy vấn trên bình đẳng hashKey) và một tập hợp con của một chuỗi thời gian (Truy vấn trên bình đẳng hashKey và mệnh đề rangeKey BETWEEN). Tuy nhiên, vấn đề chính của bạn là vấn đề "hotspot": bên trong, Dynamo sẽ phân vùng dữ liệu của bạn bằng hashKey, và sẽ phân tán ProvisionedReadCapacity của bạn trên tất cả các phân vùng của bạn. Vì vậy, bạn có thể có 1000 KB đọc một giây, nhưng nếu bạn có 100 phân vùng, thì bạn chỉ có 10 KB mỗi giây cho mỗi phân vùng và đọc tất cả dữ liệu từ một chuỗi thời gian đơn (hashKey đơn) sẽ chỉ nhấn một phân vùng. Vì vậy, bạn có thể nghĩ rằng 1000 KB lần đọc của bạn cung cấp cho bạn 1 MB một giây, nhưng nếu bạn có 10 MB lưu trữ nó có thể đưa bạn lâu hơn để đọc nó, như phân vùng duy nhất của bạn sẽ throttle bạn nhiều hơn nữa.

Ở phía trên, DynamoDB có mức ràng buộc cực kỳ cao nhưng chi phí cao trên quy mô lớn; nếu bạn muốn, bạn có thể trả 100.000 đơn vị dung lượng đọc và có thời gian phản hồi phụ trên tất cả dữ liệu đó.

Một thiết kế lý thuyết khác là lưu trữ mọi chuỗi thời gian trong một bảng riêng biệt, nhưng tôi không nghĩ DynamoDB có nghĩa là chia tỷ lệ cho hàng triệu bảng, vì vậy đây có thể là không có.

Bạn có thể thử và trải rộng chuỗi thời gian của mình trên 10 bảng trong đó dữ liệu "có độ đọc cao" nằm trong bảng 1, "hầu như không bao giờ đọc dữ liệu" trong bảng 10 và tất cả dữ liệu khác ở giữa. Điều này sẽ cho phép bạn "chơi" các quy tắc điều tiết phân vùng/phân vùng được cung cấp, nhưng ở mức độ phức tạp cao trong thiết kế của bạn. Nhìn chung, nó có lẽ không đáng giá; nơi nào bạn loạt thời gian mới? Làm thế nào để bạn nhớ tất cả chúng ở đâu? Làm thế nào để bạn di chuyển một chuỗi thời gian?

Tôi nghĩ DynamoDB hỗ trợ một số nội bộ "bùng nổ" trên các loại đọc từ kinh nghiệm của riêng tôi, và nó có thể số của tôi là tắt, và bạn sẽ nhận được hiệu suất đầy đủ. Tuy nhiên bản án của tôi là xem xét Redshift.

+0

Tôi có thể xử lý chuỗi thời gian 100K trên một cá thể EC2 nhỏ trong cơ sở dữ liệu MySQL. Mà là rất rẻ. Redshift yêu cầu các phiên bản EC2 cực lớn, rất đắt tiền ... – jQguru

0

Làm thế nào về nhỏ giọt mỗi chuỗi thời gian vào JSON hoặc tương tự và lưu trữ trong S3. Hầu hết bạn cần một tra cứu từ một nơi nào đó như Dynamo.

Bạn vẫn có thể cần chuyển đổi màu đỏ để xử lý các yếu tố đầu vào của mình.

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