【发布时间】:2017-07-02 09:34:33
【问题描述】:
我的基本表包含 30 列的 200 万条用户记录。
偶尔会有一项新活动开放,可能有 10 万用户参与(每个活动的不同组)。 每个用户都会进行一次自我认证,他/她的活动数据将被保存以供进一步使用。
设计数据库的最佳方法是什么?
-
将 100K 复制到 Users_In_Activity 表中,其中包含基表中所有必需和需要的详细信息。将为每条记录创建一个新的 PK(Users_In_Activity 主键)。
- 在这种方法中,表格和搜索之间不会有连接 一条记录将由一个 PK (Users_In_Activity) 从仅 10 万条记录中完成。
-
将 100K 的用户基本详细信息复制到Potential_Users_In_Activity 表中以进行身份验证。将创建一个新的 PK(包括用户 PK),并将创建一个新的 User_In_activity PK。
- 对于每个成功的身份验证,将在 Actual_Users_In_Activity 表中创建一条完整记录。
- 将通过一个 PK (Users_In_Activity) 从仅 100K 的记录中搜索记录。
- 在这种方法中,是在 2 个表之间加入一个 PK (Users_In_Activity)
-
对于每个成功的身份验证,将在 Actual_Users_In_Activity 表中创建一条完整记录。
- 在这种方法中,没有连接,但搜索将来自所有 200 万条记录。
.
.
总结:
方法 1:创建 100K 的 30 列记录。从10万条记录中搜索,活动期间无需创建新记录。不需要加入。只能使用一张表。
方法 2:创建 100K 的 5 列。从 10 万条记录中搜索。在活动期间创建新记录(30 列)(仅限活动用户)。需要加入。 2 表工作
方法3:从2M的记录中搜索。在活动期间创建新记录(30 列)(仅限活动用户)。 2 表工作
【问题讨论】:
-
您期望什么样的流量?读/写比率。
-
为什么需要复制这 30 列?复制数据通常不是一个好主意。
-
@AntonínLejsek 不是真的。在当今的标准中,复制数据以进行高效查询是一个好主意。
-
对于大多数用户,我预计每个用户的参与度为 30%(100K 中的 30K)——一次读取和一次写入。请记住,在一段时间内将有数百个活动(100K 表最终将成为历史记录的巨大表)。