【发布时间】:2009-03-24 21:10:29
【问题描述】:
我需要跟踪启用了 cookie 的匿名用户。
基本上,他们会浏览网站并与之互动,我希望在无需实际注册的情况下为他们提供最佳体验。稍后,如果他们愿意,他们可以注册,他们的网站活动将与他们的新帐户相关联。
类似于 Stackoverflow,但不同之处在于我预计我的大多数用户实际上不会注册,但偶尔会回来。
所以,我不想在用户表中创建一堆虚拟记录。因为我只需要一张桌子,所以我在考虑这样的事情:
投票历史表
Id TrackingToken VotingData
1 100 ...
2 100 ...
3 101 ...
4 102 ...
用户表
Id TrackingToken OtherUsersColumns
1 100 ...
TrackingTokens 表
LastTrackingToken
102
我会增加一个 LastTrackingToken 整数字段,然后简单地将该值添加到用户 cookie 并使用它来跟踪他的投票活动。然后,如果他决定注册,我只需将他的 cookie TrackingToken 值添加到他的用户记录中。
最初我在考虑一个 Guid/uniqueidentifier,但由于投票表会非常大,我需要查询它,所以我担心为 uniqueidentifier 字段编制索引。
所以,问题是(对不起 3 个子问题,但它们是如此相关,我认为上下文很重要,所以我不想重复问题和上下文描述):
整数字段在性能和索引方面是否更好?请记住 TrackingToken 不是主键字段!
您还有其他想法可以完成我概述的场景吗?
如果我决定手动生成整数 TrackingToken,可靠地生成/增加新 TrackingToken 的最佳方法是什么?假设大量并发用户会访问数据库。
【问题讨论】:
-
因此,您的问题归结为:“对 uniqueidentity 字段进行索引是否对 sqlserver 中的性能不利(版本未知)...顺便说一句,您如何保留匿名用户的个人资料数据”。看起来像是两个不同问题的材料。
-
并非如此,性能只是问题的一部分。对于我概述的场景,我想听听其他一些想法:跟踪匿名用户活动。
-
Re #3;看起来您的 TrackingToken 可能只是 SQL Server 表中的自动递增标识列。这还不够吗?
-
当然可以,但是在哪个表中?它不能在 VoteHistory 中,因为正如您在示例中看到的那样,该列中令牌的值不是唯一的。还是我误会了你?
标签: c# sql-server asp.net-mvc