【发布时间】:2012-12-30 03:39:39
【问题描述】:
我正在开发一个 HR 系统,我需要跟踪用户个人资料上的所有视图,因为每个招聘人员对候选人个人资料的视图都是有限的。我主要关心的是我的方法的可扩展性,如下所示: 我目前创建了一个有 2 列的表,即被查看的候选人的 id 和查看候选人的招聘人员的 id,每个视图只计算一次,因此如果您再次看到相同的候选人,则不会插入任何记录。
根据数据库中招聘人员和候选人的数量,我可以肯定地说我的表格会增长得非常快,更糟糕的是,我必须在每次请求时查询我的表格,因为我必须在 UI 中显示数字招聘人员查看过的候选人。考虑到可扩展性,哪种方法最好?
我会稍微解释一下这个案例: 我们有公司,每家公司都有很多招聘人员。
ViewsAssigner_Identifier 表
- ID:int PK
- Company_Id:int FK 非集群
- Views_Assigned:int 非集群
- 日期:非聚集日期
CandidateViewCounts 表
- ID:int PK
- Recruiter_id: int FK NON-CLUSTERED ?
- Candidate_id: int FK NON-CLUSTERED ?
- ViewsAssigner_Identifier_Id: int FK NON-CLUSTERED ?
- 查看日期:日期非聚集
我将通过 [ViewsAssigner_Identifier_id] 查询所有 [Candidate_id] 的 Select
我们希望按公司而不是招聘人员进行搜索,因为同一公司中的所有招聘人员都对公司使用了相同的 [Views_Assigned]。换句话说,第一个查看候选人的 Recuiter 将被存储在“CandidateViewCounts”表中,随后查看相同候选人的 Recruiter 将不会被存储。
结果: 我需要通过 [ViewsAssigner_Identifier_id] 检索所有 [Candidate_Id] 的列表,然后我可以对所有这些候选人 ID 求和。
查询示例:
从 [dbo].[CandidateViewCounts] 中选择 [Candidate_Id],其中 [ViewsAssigner_Identifier_id] = 1
有什么建议吗?
【问题讨论】:
-
当您说可扩展性时,我们指的是多少?因为如果你有 100 名招聘人员查看 10000 人,那真的不会那么大。
-
有 60,000 名招聘人员和 2,000,000 名应聘者
-
如果您只跟踪每个招聘人员的一次视图 -> 候选人组合,您将如何“限制候选人资料的视图”?似乎他们可以查看候选人 1000 次,而您只知道它发生了一次(因为您丢弃了所有后续视图)。
-
标识符_Id?这不是多余的吗?
-
我正在考虑为 [ViewsAssigner_Identifier] 中的每一行设置一个 Id PK,但如果它是多余的,我可以删除它,有什么建议吗?
标签: sql-server asp.net-mvc scalability