Rob*_*ell 6 database analytics database-design data-structures
我正在寻找一种有效的方法来存储在事件期间一起发生的对象集合,这样我就可以每天在它们上生成聚合统计数据.
举一个例子,让我们想象一个跟踪办公室会议的系统.对于每次会议,我们会记录它的长度以及它在哪个房间.
我希望按人和房间分析统计数据.我不需要跟踪个别会议(所以没有meeting_id或类似的东西),我想知道的是每日汇总信息.在我的实际应用程序中,每天有数十万个事件,因此单独存储每个事件是不可行的.
我希望能够回答以下问题:
2012年,Bob,Sam和Julie在每个会议室花了多少分钟(不一定在一起)?
使用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}
Run Code Online (Sandbox Code Playgroud)
2012年,Sam和Julie在每个会议室共聚会多少分钟?Bob,Sam和Julie在一起怎么样?
>>> query(dates=2012, people=[Sam, Julie])
{Board-Room: 128, Broom-Closet: 55}
>>> query(dates=2012, people=[Bob, Sam, Julie])
{Board-Room: 22}
Run Code Online (Sandbox Code Playgroud)
2012年,每个人在董事会会议室花了多少分钟?
>>> query(dates=2012, rooms=[Board-Room])
{Bob: 35, Sam: 790, Julie: 190}
Run Code Online (Sandbox Code Playgroud)
2012年,董事会会议室使用了多少分钟?
这实际上非常困难,因为总结每个人花费的分钟数的天真策略将导致严重的过度计算.但我们可以通过将数字分别存储为元人来解决这个问题任何人:
>>> query(dates=2012, rooms=[Board-Room], people=[Anyone])
865
Run Code Online (Sandbox Code Playgroud)
我可以使用哪些好的数据结构或数据库来启用这种查询?由于我的应用程序的其余部分使用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
Run Code Online (Sandbox Code Playgroud)
我还可以做些什么?
您的问题有点不清楚,因为您说您不想存储每个单独的会议,但是您如何获取当前的会议统计信息(日期)?此外,即使有大量记录,任何给定正确索引的表都可以非常快。
您应该能够使用像 log_meeting 这样的表。我想它可能包含以下内容:
employee_id, room_id, date (as timestamp), time_in_meeting
Run Code Online (Sandbox Code Playgroud)
其中员工 id 的外键到员工表,房间 id 的键到房间表
如果你索引员工 ID、房间 ID 和日期,你应该可以快速查找,因为 mysql 多列索引从左到右,这样你就可以获得索引(员工 ID、员工 ID + 房间 ID 和员工 ID + 房间 ID) + 时间戳)何时进行搜索。这在多索引部分有更多解释:
http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |