2009-08-26 49 views
17

Tôi quan tâm đến việc theo dõi một số đối tượng. Tôi hy vọng sẽ nhận được khoảng 10000 điểm dữ liệu sau mỗi 15 phút. (Có lẽ không phải lúc đầu, nhưng đây là 'sân chơi bóng chày chung'). Tôi cũng muốn có thể nhận được số liệu thống kê hàng ngày, hàng tuần, hàng tháng và hàng năm. Nó không quan trọng để giữ cho dữ liệu ở độ phân giải cao nhất (15 phút) trong hơn hai tháng.Giải pháp nguồn mở tốt nhất để lưu trữ dữ liệu chuỗi thời gian là gì?

Tôi đang xem xét nhiều cách khác nhau để lưu trữ dữ liệu này và đã xem xét cơ sở dữ liệu quan hệ cổ điển hoặc tại cơ sở dữ liệu schemaless (như SimpleDB).

Câu hỏi của tôi là, cách tốt nhất để thực hiện điều này là gì? Tôi rất thích một giải pháp nguồn mở (và miễn phí) cho một giải pháp độc quyền tốn kém.

Ghi chú nhỏ: Tôi đang viết ứng dụng này bằng Python.

+0

Bạn có thể tìm cho một số loại giải pháp di chuyển chuột. Bạn có thể tìm thấy các cuộc thảo luận trong câu hỏi liên quan này hữu ích: http://stackoverflow.com/questions/1248815/percentiles-of-live-data-capture/1249003#1249003 –

Trả lời

11

HDF5, có thể truy cập thông qua h5py hoặc PyTables, được thiết kế để xử lý các tập dữ liệu rất lớn. Cả hai giao diện đều hoạt động tốt. Ví dụ, cả h5py và PyTables đều có tính năng nén tự động và hỗ trợ Numpy.

+0

Điều này có vẻ rất thú vị, tôi sẽ kiểm tra xem nó ra. – lorg

8

RRDTool bởi Tobi Oetiker, chắc chắn! Đó là mã nguồn mở, nó được thiết kế cho các trường hợp sử dụng chính xác như vậy.

EDIT:

Để cung cấp một vài điểm nổi bật: cửa hàng RRDTool dữ liệu chuỗi thời gian trong một cơ sở dữ liệu round-robin. Nó giữ dữ liệu thô trong một khoảng thời gian nhất định, sau đó ngưng tụ nó theo cách có thể cấu hình để bạn có dữ liệu chi tiết cho một tháng, dữ liệu trung bình trong một tuần trong 6 tháng qua và dữ liệu trung bình trong một tháng cho dữ liệu cuối cùng 2 năm. Như một tác dụng phụ, cơ sở dữ liệu của bạn vẫn giữ nguyên cùng một kích thước tất cả thời gian (do đó không có đổ mồ hôi đĩa bạn có thể chạy đầy đủ). Đây là mặt lưu trữ. Về phía truy xuất, RRDTool cung cấp các truy vấn dữ liệu ngay lập tức được chuyển thành đồ thị (ví dụ: png) mà bạn có thể dễ dàng đưa vào tài liệu và trang web. Đó là một giải pháp vững chắc, được chứng minh bằng đá, là một hình thức tổng quát hơn so với người tiền nhiệm của nó, MRTG (một số có thể đã nghe về điều này). Và một khi bạn đã vào nó, bạn sẽ thấy mình tái sử dụng nó hơn và hơn nữa.

Để biết tổng quan nhanh và ai sử dụng RRDTool, xem thêm here. Nếu bạn muốn xem loại đồ họa nào bạn có thể sản xuất, hãy đảm bảo bạn có một cái nhìn tại số gallery.

+0

Tôi đã biết RRDTool, thật tốt khi có một "phiếu bầu" khác cho nó. Tôi sẽ xem xét nó sâu hơn. Là một sang một bên, bạn có biết nếu bạn có thể giao tiếp với nó trong Python? – lorg

+0

@lorg Tôi chưa thử bản thân mình, nhưng các tài liệu liệt kê rõ ràng các ràng buộc Python (http://oss.oetiker.ch/rrdtool/prog/rrdpython.en.html) – ThomasH

+0

nó có các ràng buộc Python. nhưng lần cuối cùng tôi nhìn (từ lâu), họ không làm việc tốt. Tôi kết thúc chỉ gói CLI với các cuộc gọi subprocess như lớp này: http://code.google.com/p/perfmetrics/source/browse/trunk/lib/rrd.py –

1

tệp văn bản thuần túy? Không rõ 10k điểm dữ liệu của bạn mỗi 15 phút dịch về byte, nhưng trong bất kỳ cách nào, các tệp văn bản dễ dàng hơn để lưu trữ/lưu trữ/chuyển/thao tác và bạn có thể kiểm tra trực tiếp, chỉ bằng cách xem xét. khá dễ dàng để làm việc với Python.

1

Đây là công cụ lưu trữ dữ liệu khá chuẩn.

Rất nhiều "sự kiện", được sắp xếp theo một số thứ nguyên, một trong số đó là thời gian. Rất nhiều tập hợp.

Trong nhiều trường hợp, các tệp phẳng đơn giản mà bạn xử lý bằng các thuật toán tổng hợp đơn giản dựa trên defaultdict sẽ làm việc kỳ diệu - nhanh chóng và đơn giản.

Nhìn vào Efficiently storing 7.300.000.000 rows

Database choice for large data volume?

0

Có một cơ sở dữ liệu chuỗi thời gian mã nguồn mở được phát triển tích cực (NET chỉ cho bây giờ) mà tôi đã viết.Nó có thể lưu trữ một lượng lớn (terrabyte) dữ liệu thống nhất theo kiểu "tệp phẳng nhị phân". Tất cả việc sử dụng đều được định hướng theo luồng (chuyển tiếp hoặc ngược lại). Chúng tôi tích cực sử dụng nó để lưu trữ và phân tích bọ ve cổ phiếu tại công ty chúng tôi.

https://code.google.com/p/timeseriesdb/

// Create a new file for MyStruct data. 
// Use BinCompressedFile<,> for compressed storage of deltas 
using (var file = new BinSeriesFile<UtcDateTime, MyStruct>("data.bts")) 
{ 
    file.UniqueIndexes = true; // enforces index uniqueness 
    file.InitializeNewFile(); // create file and write header 
    file.AppendData(data); // append data (stream of ArraySegment<>) 
} 

// Read needed data. 
using (var file = (IEnumerableFeed<UtcDateTime, MyStrut>) BinaryFile.Open("data.bts", false)) 
{ 
    // Enumerate one item at a time maxitum 10 items starting at 2011-1-1 
    // (can also get one segment at a time with StreamSegments) 
    foreach (var val in file.Stream(new UtcDateTime(2011,1,1), maxItemCount = 10) 
     Console.WriteLine(val); 
} 
Các vấn đề liên quan