2013-04-16 55 views
5

Tôi đang xem xét việc tạo cơ sở dữ liệu về thời gian Cassandra để lưu trữ hàng triệu chuỗi dữ liệu hàng ngày có khả năng có thể có tới 100B điểm dữ liệu.Thiết kế cơ sở dữ liệu thời gian trong Cassandra

Tôi nhìn bài viết này: http://rubyscale.com/blog/2011/03/06/basic-time-series-with-cassandra/

Thiết kế này là rất âm thanh. Vì vậy, về cơ bản, tôi có thể đặt dấu thời gian hàng ngày làm cột và nếu cần thiết sẽ phân đoạn các cột bằng cách nối thêm ngày vào hàng.

Hai câu hỏi tôi có:

  • Tôi nhìn vào lưu trữ lên đến 20.000 timestamped (hàng ngày) cột. Có cần thiết phải phân đoạn các hàng bằng ví dụ. năm với số lượng cột này? Có lợi thế/bất lợi để sharding hàng để giảm số lượng các cột xuống 365 mỗi năm.
  • Một ý tưởng khác mà tôi có là thay vì sharding cột theo hàng là tạo gia đình cột cho mỗi năm. Bằng cách này khi truy cập dữ liệu từ nhiều năm, tôi sẽ phải truy vấn nhiều gia đình cột hơn là một họ cột và tham gia các kết quả ở phía khách hàng. Cách tiếp cận này có làm tăng tốc độ mọi thứ hay làm chậm mọi thứ xuống?

Trả lời

4

Nếu bạn định quản lý số lượng ghi lớn thì có một vấn đề với cách tiếp cận của bạn.

Viết luôn bằng 1 khóa nghĩa là tất cả ghi cho khóa đó sẽ chuyển đến một nút. Về cơ bản bạn sẽ sử dụng một nút mỗi ngày trong cụm của bạn, vì vậy bạn cũng có thể có một ví dụ lớn của Cassandra chứ không phải là bận tâm thiết lập một cụm. Nếu tần suất ghi của bạn thực sự cao, bạn có thể giảm các nút chịu trách nhiệm cho ngày/khóa đó.

Lời khuyên của tôi là xô một ngày trong nhiều hàng được sử dụng đồng thời. Đợt thời gian có thể nguy hiểm vì một sự đột biến đột ngột trong một xô có thể làm mọi thứ trở nên tồi tệ.

bạn có thể tạo xô của bạn (key hàng) như thế này:

  • [ROW_BASE_NAME] + [DAY] + someHashFunction (timestamp)% 10
  • [ROW_BASE_NAME] + [DAY] + random.nextInt (10)
  • [ROW_BASE_NAME] + [DAY] + nextbucket < --- đó là nếu bạn có một cách an toàn để xoay xô mình

có nhiều cách để làm điều đó. Bạn cũng có thể sử dụng một số phần tử của cột được lưu để làm điều đó. Nhưng tôi nghĩ điều quan trọng là phải làm điều đó để tận dụng toàn bộ cụm cassandra mọi lúc.

Câu trả lời của tôi chỉ hợp lệ để viết ứng dụng/chức năng nặng vì bạn sẽ phải sử dụng multi_get (đọc nhiều dòng toàn bộ hàng) để đọc tất cả dữ liệu và tạo lại toàn bộ dòng thời gian cho ngày đó.

+0

Vì vậy, bạn nghĩ rằng không có điểm nào trong việc phá vỡ các nhóm bảng/cột thành các họ cột riêng biệt nhưng để làm điều đó thay vì theo hàng? Có bất kỳ bất lợi nào khi có quá nhiều hàng trong một họ cột đơn không? – datageek

+2

Gia đình cột chỉ là một mức khóa quan trọng.Nếu dữ liệu của tôi có tính chất giống nhau và cần các cài đặt tương tự theo cách lưu vào bộ nhớ đệm, so sánh (tên cột), v.v .. Sau đó, tôi đặt chúng trong cùng một nhóm cột. Các gia đình cột cộng thêm không dễ quản lý theo chương trình. Trong khi chỉ cần viết cho một khóa mới sẽ tạo ra nó. VÀ bạn không thể đọc từ các CF riêng biệt trong một truy vấn. –

1

Bạn cũng nên đọc bài viết này trên Advanced Time Series with Cassandra.

+0

Tôi thấy nó cảm ơn, thực sự tôi không thích giải pháp đó từ bài viết chuỗi thời gian nâng cao. Nếu tôi hiểu nó, điều này đòi hỏi phải đặt dữ liệu là Json? – datageek

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