2009-10-26 42 views
36

Tôi đang cố gắng tìm ra chính xác những gì các kho dữ liệu mới lạ như bigtable, hbase và cassandra thực sự là.lưu trữ dữ liệu chuỗi thời gian được đặt hàng lớn trong các dẫn xuất bigtable

Tôi làm việc với số lượng lớn dữ liệu thị trường chứng khoán, hàng tỷ hàng dữ liệu giá/trích dẫn có thể thêm tối đa 100 gigabyte mỗi ngày (mặc dù các tệp văn bản này thường được nén ít nhất theo thứ tự độ lớn). Dữ liệu này về cơ bản là một số ít, hai hoặc ba chuỗi ngắn và dấu thời gian (thường là mili giây). Nếu tôi phải chọn một mã định danh duy nhất cho mỗi hàng, tôi sẽ phải chọn toàn bộ hàng (vì một trao đổi có thể tạo ra nhiều giá trị cho cùng một ký hiệu trong cùng một mili giây).

Tôi cho rằng cách đơn giản nhất để ánh xạ dữ liệu này thành bảng lớn (tôi bao gồm các dẫn xuất của nó) là tên và ngày biểu tượng (có thể trả về chuỗi thời gian rất lớn, hơn một triệu điểm dữ liệu chưa từng thấy) . Từ việc đọc mô tả của họ, có vẻ như nhiều khóa có thể được sử dụng với các hệ thống này. Tôi cũng giả định rằng số thập phân không phải là ứng viên tốt cho khóa.

Một số hệ thống này (ví dụ: Cassandra) tuyên bố có thể thực hiện các truy vấn phạm vi. Liệu tôi có thể truy vấn hiệu quả, nói rằng, tất cả các giá trị cho MSFT, trong một ngày nhất định, từ 11:00 sáng đến 1:30 chiều?

Điều gì sẽ xảy ra nếu tôi muốn tìm kiếm trên TẤT CẢ biểu tượng cho một ngày nhất định và yêu cầu tất cả biểu tượng có giá từ $ 10 đến $ 10,25 (vì vậy tôi đang tìm kiếm giá trị và muốn trả về khóa)? Điều gì sẽ xảy ra nếu tôi muốn nhận được chuỗi hai lần, trừ một chuỗi từ chuỗi kia và trả về chuỗi hai lần và kết quả của chúng, tôi có phải thực hiện logic của mình trong chương trình riêng của tôi không? Không.

Đọc các giấy tờ có liên quan dường như cho thấy rằng các hệ thống này không phù hợp cho các hệ thống chuỗi thời gian lớn. Tuy nhiên, nếu các hệ thống như bản đồ google dựa trên chúng, tôi nghĩ chuỗi thời gian cũng hoạt động tốt. Ví dụ, suy nghĩ về thời gian như trục x, giá như trục y và ký hiệu như các vị trí được đặt tên - tất cả đột nhiên có vẻ như bigtable phải là cửa hàng lý tưởng cho chuỗi thời gian (nếu toàn bộ trái đất có thể được lưu trữ, truy lục , thu nhỏ và chú thích, dữ liệu thị trường chứng khoán sẽ không đáng kể).

Một số chuyên gia có thể chỉ cho tôi đúng hướng hoặc làm sáng tỏ mọi hiểu lầm.

Cảm ơn

Trả lời

20

Tôi không phải là một chuyên gia nêu ra, nhưng tôi đã chơi với Cassandra cho một vài ngày nay, và tôi có một số câu trả lời cho bạn:

  1. Đừng lo lắng về số lượng dữ liệu, nó không liên quan với các hệ thống như Cassandra, nếu bạn có $$$ cho một cụm phần cứng lớn.

Một số hệ thống này (Cassandra, ví dụ) tuyên bố có thể thực hiện các truy vấn phạm vi. Liệu tôi có thể truy vấn hiệu quả, nói rằng, tất cả các giá trị cho MSFT, trong một ngày nhất định, từ 11:00 sáng đến 1:30 chiều?

Cassandra rất hữu ích khi bạn biết cách làm việc với các phím. Nó có thể nhanh chóng thông qua các phím rất nhanh. Vì vậy, để tìm kiếm MSFT trong khoảng thời gian từ 11: 00-01: 30, bạn phải khóa các hàng như sau:

MSFT-timestamp, GOOG-timestamp, ..etc Sau đó, bạn có thể yêu cầu Cassandra tìm tất cả các phím bắt đầu với MSFT-now và kết thúc bằng MSFT-now + 1hour.

Nếu tôi muốn tìm kiếm trên TẤT CẢ biểu tượng cho một ngày nhất định và yêu cầu tất cả biểu tượng có giá từ $ 10 đến $ 10,25 (vì vậy tôi đang tìm kiếm giá trị và muốn trả về khóa)?

Tôi không phải là chuyên gia, nhưng cho đến nay tôi nhận ra rằng Cassandra không 'tìm kiếm theo giá trị nào cả. Vì vậy, nếu bạn muốn làm như trên, bạn sẽ phải tạo một bảng khác dành riêng cho vấn đề này và thiết kế lược đồ của bạn để phù hợp với trường hợp. Nhưng nó sẽ không khác nhiều so với những gì tôi đã mô tả ở trên. Đó là tất cả về cách đặt tên cho các khóa và cột của bạn. Cassandra có thể tìm thấy chúng rất nhanh chóng!

Điều gì sẽ xảy ra nếu tôi muốn nhận chuỗi hai lần, trừ cái kia và trả về chuỗi hai lần và kết quả của chúng, tôi có phải thực hiện logic trong chương trình của riêng tôi không?

Đúng, tất cả logic được thực hiện bên trong chương trình của bạn. Đây không phải là MySQL. Đây chỉ là một công cụ lưu trữ. (Nhưng tôi chắc chắn các phiên bản tiếp theo sẽ cung cấp những thứ này)

Hãy nhớ rằng, tôi là người mới làm việc này, nếu tôi sai, hãy sửa tôi.

+1

khi bạn nói "bạn có thể yêu cầu Cassandra tìm tất cả các khóa bắt đầu bằng MSFT-now và kết thúc bằng MSFT-now + 1hour" - Bạn có nghĩa là RowSclice Query không ?? Tôi có nghĩa là nếu tôi hỏi cassandra cho tôi tất cả các phím hàng giữa t1 và t2, t là một dấu thời gian, là nó hiệu quả. Tôi đã nghe rowSlices không hiệu quả như lát cột trong Cassandra? – Peter

11

Một người mà tôi tôn trọng đề nghị Cơ sở dữ liệu chuỗi thời gian mở. Đặc biệt, lược đồ đó là đẹp nhất mà anh từng thấy.

http://opentsdb.net/

+0

Ngoài vẻ đẹp, MIỄN PHÍ! –

+1

OpenTSDB là khá tốt, tiếc là không phù hợp với dữ liệu tài chính, đặc biệt là nếu bạn đang cố gắng lưu trữ dữ liệu đánh dấu với độ phân giải cao hơn (OpenTSDB hiện chỉ có độ phân giải lên đến một giây). – Datageek

2

'Đang đứng trước cùng một ngọn núi. Vấn đề chính của tôi với cassandra là tôi không thể lấy một luồng trên tập kết quả, ví dụ dưới dạng một trình lặp.

Tôi đang tìm kiếm lên và xuống tài liệu và mạng, nhưng không có gì.

Tôi không thể tìm nạp tất cả các khóa và sau đó nhận hàng bằng hàng tỷ hàng khiến việc này không thể thực hiện được.

+0

Chỉ cần chạy vào cùng một vấn đề. Tôi ước có một cách đơn giản để tạo luồng kết quả truy vấn. Tôi có thể đi qua chúng một cách nhanh chóng, chỉ cần không thể đủ khả năng nhận được tất cả trong bộ nhớ cùng một lúc ... Bạn đã tìm thấy bất kỳ giải pháp? – em70

+0

Hi emaster70, không có tôi đã không tìm thấy một giải pháp. cổ vũ – user1052080

0

Chỉ vì lợi ích của sự hoàn chỉnh đọc này vào năm 2018, bây giờ có một cơ sở dữ liệu đặc biệt chỉ dành riêng cho dữ liệu chuỗi thời gian gọi TimescaleDB

http://www.timescale.com/

Blog này rất đáng đọc, nó giải thích lý do tại sao nó vượt trội so với các giải pháp như Cassandra cho trường hợp đặc biệt đó và tại sao họ quyết định xây dựng nó trên cơ sở dữ liệu PostgreSQL quan hệ

https://blog.timescale.com/time-series-data-why-and-how-to-use-a-relational-database-instead-of-nosql-d0cd6975e87c

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