Tôi đang điều tra các giải pháp lưu trữ và truy vấn hồ sơ lịch sử về các sự kiện xảy ra đối với một số lượng lớn các mục.Thuật toán trong Python để lưu trữ và tìm kiếm sự xuất hiện hàng ngày cho hàng nghìn sự kiện được đánh số?
Đây là kịch bản đơn giản: Tôi nhận nhật ký hàng ngày 200 000 đèn đường (có nhãn sl1 đến sl200000) cho biết đèn có hoạt động vào ban ngày hay không. Nó không quan trọng trong bao lâu thì đèn chỉ phục vụ cho nó trong một ngày dương lịch nhất định.
bit thông tin khác được lưu trữ cho mỗi đèn là tốt và đầu của lớp Python trông giống như sau:
class Streetlamp(object):
"""Class for streetlamp record"""
def __init__(self, **args):
self.location = args['location']
self.power = args['power']
self.inservice = ???
My py-foo không phải là quá lớn và tôi muốn tránh một giải pháp đó là quá tham lam trên đĩa/bộ nhớ lưu trữ. Vì vậy, một giải pháp với một dict của (năm, tháng, ngày) tuples có thể là một trong những giải pháp, nhưng tôi hy vọng sẽ nhận được con trỏ cho một giải pháp hiệu quả hơn.
Một hồ sơ có thể được lưu trữ như một dòng bit với mỗi bit đại diện cho một ngày của một năm bắt đầu với Jan 1. Do đó, nếu một chiếc đèn đã hoạt động trong ba ngày đầu tiên của năm 2010, sau đó các bản ghi có thể là:
sl1000_up = dict('2010': '11100000000000...', '2011':'11111100100...')
Tìm kiếm qua các ranh giới năm sẽ cần hợp nhất, năm nhuận là trường hợp đặc biệt, cộng với tôi cần mã/giải mã bit công bằng với giải pháp được trồng tại nhà này. Có vẻ như không yên tĩnh. speed-up-bitstring-bit-operations, how-do-i-find-missing-dates-in-a-list và finding-data-gaps-with-bit-masking nơi các bài đăng thú vị tôi đã xem qua. Tôi cũng điều tra python-bitstring và đã làm một số googling, nhưng không có gì có vẻ thực sự phù hợp.
Ngoài ra, tôi muốn tìm kiếm 'các khoảng trống' để có thể, ví dụ: 'ba ngày trở lên không hoạt động' và điều quan trọng là ngày gắn cờ có thể được chuyển đổi thành ngày theo lịch thực.
Tôi sẽ đánh giá cao ý tưởng hoặc gợi ý cho các giải pháp khả thi. Để bổ sung thêm chi tiết, nó có thể được quan tâm mà DB back-end được sử dụng là ZODB và các đối tượng Python thuần túy có thể được chọn được ưu tiên.
Cảm ơn bạn đã chỉ ra scikits.timeseries. Nó dường như hỗ trợ hầu hết các phân tích tôi phải làm. Lưu trữ tất cả các loại đèn trong một mảng trong một năm không phải là khả thi, vì tôi muốn lưu trữ bản ghi cho một bóng đèn trong đối tượng được khởi tạo. Tuy nhiên, điều này phải dễ dàng để thích ứng và với numpy tôi không có đầu reinvent bánh xe. Chỉ có một noob Python có thể bỏ qua gói này ;-) – Axial
Điều đáng biết là một bool gọn gàng được lưu trữ như một byte toàn bộ, do đó, điều này có thể không phải là bộ nhớ hiệu quả như nó có vẻ. –