【发布时间】:2018-04-06 20:33:29
【问题描述】:
我需要您在项目方面的帮助。我想设计多语言抽认卡数据库。为大量用户提供服务;每个用户可以拥有任意数量的卡片(单词)。出于统计目的,我必须存储每张卡片(单词)的所有学习历史。
假设,我们有 500000 个用户,每个用户有 10000 张卡片(字);每个单词大约有 100 条记录(例如,如果答案是对或错)。存储此历史记录的示例方法是使用下表:
User_Id,Word_Id,Date,Answer_Type
但是这个表会包含大量的记录,大约 5000 亿条记录。 有什么有效的方法可以做到,而且不影响查询时间。
【问题讨论】:
-
这是一个“我想要一匹小马”的问题,它过于宽泛,无法给出具体的技术答案,因此在 Stack Overflow 上它是题外话。您需要尝试解决此问题并展示您的代码,以便我们了解您在技术层面上尝试做什么,并展示您解决此问题的承诺。
-
您没有 500,000 个用户。你有零。为现实的目标而不是假设的情况而设计。如果您预计发布时会有 1000 人左右,请牢记这一目标。
-
先得到10,000个条目才担心大约500,000,000,000..
-
我认为你可以水平拆分数据。您可以对用户进行分区,例如,名称以“A”开头的用户位于一个表/数据库/服务器中,等等。具有“B”的用户位于不同的表/数据库/服务器中。依此类推字母表(或其他一些哈希)对单词和记录执行相同的操作。您将拥有很多数据库而不是单个数据库。这样,对用户“Adam”的查询甚至不会触及保存用户“Billy”数据的数据库。
-
@user2023861,考虑一下出于统计目的查询数十个表的情况。
标签: sql-server database-design