Tôi cần lưu trữ và để có thể truy vấn một số dữ liệu chuỗi thời gian rất lớn.
Các thuộc tính của dữ liệu như sau:
- số sê-ri: khoảng 12.000 (mười hai nghìn)
- số điểm dữ liệu trên toàn cầu: khoảng 500.000.000 mỗi tháng (năm trăm triệu)
- các loại giá trị hỗn hợp: phần lớn các điểm dữ liệu là các giá trị dấu phẩy động, phần còn lại là các chuỗi
- giai đoạn lấy mẫu: biến giữa các chuỗi cũng như trong một chuỗi
- dấu thời gian: độ chính xác mili giây
- thời gian lưu giữ dữ liệu: vài năm, không phân rã hoặc lấy mẫu
- lưu trữ dữ liệu cần được xây dựng gần thời gian thực, nhưng độ trễ hợp lý (~ 1 giờ) là chấp nhận được
- dữ liệu quá khứ có thể được xây dựng lại nếu cần, nhưng với chi phí cao
- đôi khi, nhưng khá hiếm khi, một số dữ liệu trong quá khứ cần được cập nhật
Thuộc tính của các truy vấn được hình dung:
- hầu hết các truy vấn đối với dữ liệu sẽ là các truy vấn dựa trên dấu thời gian; từ một ngày đến vài tháng / năm. 90% + sẽ là các truy vấn trên dữ liệu gần đây nhất
Những yêu cầu khác:
- giải pháp phải miễn phí như trong bia miễn phí và tốt nhất là nguồn mở
Suy nghĩ ban đầu của tôi nghĩ là sử dụng PyTables / Pandas với các tệp HDF5 làm lưu trữ phụ trợ thay vì cơ sở dữ liệu SQL.
Câu hỏi:
Giả sử PyTables / Pandas là tuyến đường "tốt nhất", sẽ tốt hơn nếu chia dữ liệu trong một số tệp HDF, mỗi tệp kéo dài trong một khoảng thời gian nhất định hoặc đặt mọi thứ vào một tệp sau đó sẽ trở nên khổng lồ?
Tôi nên đi và thích định dạng bảng cố định hoặc bảng? Đối với tôi, định dạng cố định có vẻ ổn nếu tôi giữ một tệp HDF mỗi tháng, vì theo cách này, toàn bộ loạt có thể vừa với RAM và tôi có thể cắt trong bộ nhớ mà không cần chỉ mục định dạng bảng. Tôi có đúng không?
Và nếu đó không phải là cách tiếp cận tốt nhất, tôi nên cấu trúc kho dữ liệu này như thế nào hoặc tôi nên xem xét công nghệ nào? Tôi không phải là người đầu tiên giải quyết việc lưu trữ các tập hợp dữ liệu chuỗi thời gian lớn, cách tiếp cận chung để giải quyết thách thức này là gì?
Các cách tiếp cận khác tôi đã xem xét:
- cơ sở dữ liệu mảng: chúng rất phù hợp với chuỗi thời gian với thời gian lấy mẫu không đổi, vì khi đó bạn chỉ cần lưu trữ thời gian bắt đầu và kết thúc và thời gian lấy mẫu của mảng, sau đó chỉ có các giá trị trong chính mảng và lập chỉ mục là dễ dàng. Nhưng với các giai đoạn lấy mẫu thay đổi trong chính chuỗi, tôi cần giữ một dấu thời gian gần hơn-> quan hệ giá trị, theo quan điểm của tôi không phù hợp lắm với DBMS mảng.
- cơ sở dữ liệu SQL tiêu chuẩn với dấu thời gian, paramID, giá trị dưới dạng cột nhưng theo bản chất của chúng, chúng yêu cầu rất nhiều I / O đĩa cho bất kỳ truy vấn nào