这是我现在面临的设计问题,我有90M的数据记录,我有10K这些记录的用户。我想设计一个模式,这个模式应该允许我跟踪10K用户对这些90M记录的使用情况。
当前表格结构
10k User table
--------------
user_id
first_name
lastname..
90M data table:
---------------
record_id
value1
value2..
目前的实施: - 我们有下表用于跟踪问题,因为它不可扩展
usage_tracking :
---------------
record_id
user_id
如果所有用户都使用所有记录,则该表将具有90M * 10K记录。如果我的用户是100K或更多,该怎么办?该表不可扩展。
用例: 该产品销售这些90M记录,用户根据这些记录的使用情况进行计费。我们应该假设所有用户都使用所有记录
当用户从UI条目访问记录时,usage_tracking表就像事务表一样。请建议可扩展的设计方法来跟踪用户使用哪条记录?
答案 0 :(得分:1)
所有一万个用户接触所有九千万条记录的可能性有多大?甚至一个用户触摸它们的可能性有多大?我不知道,但你应该。因为没有这些信息,你就没有机会做出体面的设计工作。
您拥有的跟踪表(record_id, user_id)
是您可以逃脱的最小值。没有更小的结构可以容纳您想要的信息。
那你有什么顾虑?
访问速度?好吧,建立索引(record_id, user_id)
(无论如何这是你的主键)和(user_id, record_id)
。这样你就可以触摸表格,除了初始插页。
空间?您可以使用表和索引压缩。两个复合索引都应该很好地压缩。由于您的表似乎是插入的,因此您可以使用Enterprise Edition许可证提供的基本表压缩。 Find out more
所有这些都是通用的,这是您可以在不提供特定用例的情况下获得的全部内容。例如,如果您的客户想知道用户最后一次触摸特定记录的时间是什么时候?那么这就是问题所在。此外,您还有如何实现实际跟踪的问题(在我看来,这是另一个问题)。