Tôi đang tìm một cách hiệu quả để lưu trữ bộ đối tượng đã xảy ra cùng nhau trong các sự kiện, theo cách mà tôi có thể tạo thống kê tổng hợp trên chúng theo từng ngày.Làm thế nào để lưu trữ các bộ đối tượng đã xảy ra cùng nhau trong các sự kiện?
Để tạo một ví dụ, hãy hình dung một hệ thống theo dõi các cuộc họp trong văn phòng. Đối với mỗi cuộc họp, chúng tôi ghi lại số phút và thời gian diễn ra.
Tôi muốn nhận số liệu thống kê được chia nhỏ theo từng người cũng như theo phòng. Tôi không cần phải theo dõi các cuộc họp cá nhân (vì vậy không có meeting_id
hoặc bất cứ điều gì như thế), tất cả những gì tôi muốn biết là thông tin tổng hợp hàng ngày. Trong ứng dụng thực sự của tôi có hàng trăm ngàn sự kiện mỗi ngày để lưu trữ từng cá nhân là không khả thi.
Tôi muốn để có thể trả lời những câu hỏi như:
Trong năm 2012, có bao nhiêu phút đã Bob, Sam, và Julie chi tiêu trong từng phòng hội nghị (không nhất thiết với nhau)?
lẽ tốt để làm điều này với 3 truy vấn:
>>> query(dates=2012, people=[Bob])
{Board-Room: 35, Auditorium: 279}
>>> query(dates=2012, people=[Sam])
{Board-Room: 790, Auditorium: 277, Broom-Closet: 71}
>>> query(dates=2012, people=[Julie])
{Board-Room: 190, Broom-Closet: 55}
Trong năm 2012, có bao nhiêu phút đã Sam và Julie dành gặp gỡ nhau ở mỗi phòng hội nghị? Còn Bob, Sam và Julie thì sao?
>>> query(dates=2012, people=[Sam, Julie])
{Board-Room: 128, Broom-Closet: 55}
>>> query(dates=2012, people=[Bob, Sam, Julie])
{Board-Room: 22}
Trong năm 2012, có bao nhiêu phút đã mỗi người chi tiêu trong Ban-Phòng?
>>> query(dates=2012, rooms=[Board-Room])
{Bob: 35, Sam: 790, Julie: 190}
Trong năm 2012, có bao nhiêu phút là Ban-Phòng được sử dụng?
Điều này thực sự khá khó khăn vì chiến lược ngây thơ tổng hợp số phút mà mỗi người chi tiêu sẽ dẫn đến việc đếm quá mức nghiêm trọng. Nhưng chúng ta có lẽ có thể giải quyết điều này bằng cách lưu trữ các số riêng biệt như meta-người Bất cứ ai:
>>> query(dates=2012, rooms=[Board-Room], people=[Anyone])
865
một số cấu trúc dữ liệu tốt hoặc cơ sở dữ liệu mà tôi có thể sử dụng để cho phép loại truy vấn là gì? Kể từ khi phần còn lại của ứng dụng của tôi sử dụng MySQL, tôi bị cám dỗ để xác định một cột chuỗi chứa id (sắp xếp) của từng người trong buổi làm việc, nhưng kích thước của bảng này sẽ phát triển khá nhanh chóng:
2012-01-01 | "Bob" | "Board-Room" | 2
2012-01-01 | "Julie" | "Board-Room" | 4
2012-01-01 | "Sam" | "Board-Room" | 6
2012-01-01 | "Bob,Julie" | "Board-Room" | 2
2012-01-01 | "Bob,Sam" | "Board-Room" | 2
2012-01-01 | "Julie,Sam" | "Board-Room" | 3
2012-01-01 | "Bob,Julie,Sam" | "Board-Room" | 2
2012-01-01 | "Anyone" | "Board-Room" | 7
Tôi có thể làm gì nữa?
Vì vậy, để làm rõ, bạn có một bajillion "cuộc họp" xảy ra, vì vậy bạn tổng hợp chúng theo ngày. Điều này có nghĩa là bạn có số phút dành cho ngày giao nhau của người giao nhau trong phòng (hãy gọi R U P U D). Bạn muốn R U (giao lộ P1 P2 giao điểm P3) U D theo cách mà bạn không phải lưu trữ mỗi cuộc họp ... – Temuz
Có chính xác! Nếu chúng ta lưu trữ các session_ids, chúng ta chỉ có thể lấy session_ids UNIQUE và sau đó tìm kiếm thông tin cho từng cái, nhưng đó sẽ là một tấn các bản ghi cho MySQL để tổng hợp. –
Các bộ truy vấn này đã được sửa hay nó có thể thay đổi? Ý tôi là nó có thể giống như tìm mọi lúc khi Julia và Bob không ở trong phòng họp của Borad này. Tôi nghĩ rằng ID cuộc họp không quan trọng lắm ở đây, vì chúng tôi có thể có được cuộc họp độc đáo bằng cách sử dụng kết hợp thời gian và BoardRoom. – AKS