我正在尋找一種有效的方式來存儲事件期間一起發生的對象集合,以這種方式我可以每天在其上生成聚合統計信息。如何存儲事件期間一起發生的對象集?
舉個例子,讓我們想象一個跟蹤辦公室會議的系統。對於每次會議,我們都記錄了多長時間以及它發生在哪個房間。
我希望統計人員和房間的統計數據。我不需要跟蹤個人會議(所以沒有meeting_id
或類似的東西),我只想知道每日聚合信息。在我的真實應用程序中,每天有成千上萬的事件,因此單獨存儲每個事件是不可行的。
我希望能夠回答這樣的問題:
在2012年,多少分鐘沒有鮑勃,山姆和朱莉花費在每個會議室(不一定在一起)?
也許還不錯,要做到這一點有3個查詢:
>>> 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}
在2012年,沒有薩姆和朱莉多少分鐘花費在每個會議室TOGETHER會議?鮑勃,薩姆和朱莉一起怎麼樣?
>>> query(dates=2012, people=[Sam, Julie])
{Board-Room: 128, Broom-Closet: 55}
>>> query(dates=2012, people=[Bob, Sam, Julie])
{Board-Room: 22}
在2012年,多少分鐘沒有每個人在董事會室度過?
>>> query(dates=2012, rooms=[Board-Room])
{Bob: 35, Sam: 790, Julie: 190}
在2012年,多少分鐘是董事會室使用?
這實際上很困難,因爲總結每個人花費的分鐘數的天真策略會導致嚴重的重複計算。但是,我們或許可以通過存儲數量分別解決這爲元人任何人:
>>> query(dates=2012, rooms=[Board-Room], people=[Anyone])
865
什麼是我可以使用,使這種查詢的一些良好的數據結構或數據庫?由於我的應用程序的其他部分使用MySQL,我很想來定義保存每個人在會議(排序)的ID字符串列,但該表的規模將很快增長:
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
我還可以做些什麼?
因此,爲了澄清,你有一個bajillion「會議」發生,所以你在一天之內彙總它們。這意味着你有十分鐘的時間用於房間交叉路口人行天(我們稱之爲R U P U D)。您需要R U(P1路口P2路口P3)U D,您不必存儲每次會議的方式...... – Temuz
是的!如果我們存儲了meeting_ids,我們可以抓住UNIQUE meeting_ids,然後查找每個會議的信息,但這將是MySQL聚合的大量記錄。 –
這些查詢集是固定的還是可以更改的?我的意思是,當Julia和Bob不在這個會議的Borad會議室時,可以找到所有的時間。我認爲會議ID在這裏並不重要,因爲我們可以通過組合時間和BoardRoom獲得獨特的會議。 – AKS