2012-03-13 58 views
2

我们拥有一个具有复杂用户权限的系统,用于确定用户在应用程序中可以看到哪些联系人,并且正在研究构建表以使我们可以扩展的最佳方式。这些权限太复杂,无法实时处理,因此需要写入表中,然后在执行管理员功能或添加/编辑/删除联系人时更新表。使用大型数据集的复杂数据访问

联系人表中有1000万条记录。我的第一个想法是创建一个contactUserLink表,它将contactUserLinkID,contactID,userID与contactUserLinkID上的聚集索引以及contactiD和userID上的非聚集索引进行快速搜索。

我的这个担心是这样的:

  1. 如果我们有200个用户,他们都有到contactUserLink可能会膨胀到数百万行的数百个数据的大部分地区不同的访问。

  2. 由于编辑了联系人并对规则进行了管理员更改,因此在此表中会进行大量添加/编辑/删除操作。

  3. 管理员更改可能导致大量的删除/插入,因为用户权限被重新使用,如果他们花费很长时间可能会让用户无法访问。

  4. 如果新用户被添加并且他可以访问所有记录,那么将1000万条记录写入该表不可能很快?

我们使用SQL 2008

我希望我设法向他们说明,以便它有一定的道理。

任何帮助,将不胜感激。

回答

0

这类颗粒状用户的权限管理并不理想。如#4所述,编写1000万条记录让管理员访问所有联系人是绝对不可扩展的。你有没有试过寻找基于角色的权限?这是您的方案中的一个选项吗?

+0

基于角色的权限问题在于,对于权限基于地域等的销售团队,每个人都有不同的访问权限,因此具有不同的角色,因此您仍然会得到大量的数据我想上面的问题。 – Tim 2012-03-13 18:25:50

+0

然后你可以称之为基于领土的权限。将领土用户组合在一起并授予领土管理员访问领土的权限。通过这种方式创建管理员时,只需添加行就可以访问整个地区。 – 2012-03-13 18:48:42

+0

我不知道你的系统的局限性,但是这种分组/角色/地域基础许可将值得你花时间进一步研究。你可以分组+联系。在确定您有权访问哪些联系人时,只需将其合并即可。第一部分将根据您的小组权限确定联系人,然后将每个联系人权限与联系人联合。我不知道我是否会让它更混乱。如果你深入研究过这个问题并决定采用这种方法......也许是计算列?索引视图?可能有助于加快查询速度。 – 2012-03-13 18:57:05