我们有一个功能请求,其中必须记录所述用户对某些实体的选择,这是一个整数,每次用户选择该特定实体时,该整数都会增加。每当用户获得与该实体的所有关联时,此信息便会用于对这些实体进行排序。
假设我们仅限于使用sql server作为持久性存储,并且我们可以拥有数百万个用户,并且每个用户可以拥有上述实体中的1到10个之间的任何位置,那么性能很快就会成为问题。
一个选择是有一个仅追加日志表,在该表中,用户每次选择实体时都会保存用户ID和实体ID,在查询侧,我们将获得所有记录并按实体ID进行分组。这可能很快导致表变得非常大。
另一种方法是由用户ID,实体ID和计数组成三列,我们将在用户每次选择该实体时增加计数。
以上两个选项是我能够提出的。
我想知道是否还有其他选择,以及上述解决方案对性能的影响。
谢谢
答案 0 :(得分:1)
如果是2001年,性能可能会成为问题。 如果您使用的是SQL Server 2012或2016 那我说都不错 Int或Big ints索引良好,对性能的影响微不足道。
您还可以将数据存储在xml或json varchar字段中
但我会选择您的第一个选择。
使用大整数并确保无论您做什么都使用索引