根据动态组计算收件箱

时间:2014-02-17 20:47:01

标签: sql hadoop memcached dynamic-data infinispan

我在为用户计算收件箱时遇到此问题:

  • 一方面,我有一堆可能有的文件 很多读者(DOCS表)。
  • 每个读者属于一个或多个已定义的用户组。
  • 我有一张DOC_ACCES_BY_GROUP表(DOC_ID,GROUP_ID)
  • 我需要知道用户是否阅读过文档。所以,我有一个DOC_UNREAD表(DOC_ID,USER_ID),这样如果一个文档在该表中,那么用户还没有阅读该文档。

然后每个小组可以随时更改参与者,因此我需要实时计算某个用户的“收件箱”。

第一个猜测是:计算用户所涉及的所有组,然后在所有DOCS和DOC_ACCESS_BY_GROUP表之间建立连接以获取该用户的所有文档(包含该数据) asociated),然后是另一个联接,以查看是否为用户读取了该文档。

问题是,当我的DOCS表格大幅增长并且我有很多用户和许多群组时...性能非常差。

我正在尝试抽象问题,这实际上有点复杂。每个用户存储文档权限的可能性将被丢弃。我还想象通过优化SQL查询可以解决这个问题,但应该通过软件完成。我们还支持许多数据库,如Mysql,Posgre或MSSQL,因此它无法链接到特定的供应商解决方案(我猜)。

所以,问题是:有没有人知道任何机制或框架或算法以不同的方式做事并解决这个问题,以最佳和高效的方式

Memcached的? Infinispan的? Hadoop的?

1 个答案:

答案 0 :(得分:0)

您可能希望“实现”收件箱并在每次用户读取内容时更新它,组的成员身份更改等。实现的收件箱可以存储在数据库表中或存储在Infinispan / memcached等单独的系统中