【问题标题】:Database schema design for large data usage tracking用于大数据使用跟踪的数据库架构设计
【发布时间】:2014-09-29 00:22:55
【问题描述】:

这是我现在面临的设计问题,我有 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 条记录,用户根据这些记录的使用情况进行计费。我们应该假设所有用户都使用所有记录

usage_tracking 表类似于事务表,当用户从 UI 条目访问记录时创建了此表。

请建议可扩展的设计方法来跟踪用户使用了哪些记录?

【问题讨论】:

  • 提供一些努力,而不是把你自己的作品带给我们。此外,这个问题与客户端技术(在本例中为 Java)完全无关。
  • 我已经添加了当前的实现细节。
  • 好的,现在:为什么您当前的方法不可扩展?
  • 更新了对于不清楚的问题很抱歉。
  • 您当前的原因并不是不使您当前的方法不可扩展的真正原因。您可以为您的表使用表分区和其他 Oracle 特定的优化。是的,数据库可以在一个表中支持如此数量的行,但是您需要更多的硬盘空间。

标签: oracle database-design database-schema


【解决方案1】:

所有一万用户访问所有九千万条记录的可能性有多大?即使是一个用户也会接触到所有这些东西的可能性有多大?我不知道,但你应该。因为没有这些信息,您就没有机会完成体面的物理设计。

您拥有的跟踪表(record_id, user_id) 是您可以逃脱的最小的。没有更小的结构可以容纳您想要的信息。

那么您有什么顾虑?

访问速度?好吧,以(record_id, user_id)(无论如何这是您的主键)和(user_id, record_id) 两种方式构建索引。这样一来,除了初始插入之外,您将触摸表格。

空间?您可以使用表和索引压缩。两个复合索引都应该压缩得很好。因为一旦您可以使用企业版许可证提供的基本表压缩,您的表似乎是插入的。 Find out more.


所有这些都是一般性的,这是您在不提供特定用例的情况下可以获得的所有内容。例如,如果您的客户想知道用户最后一次触摸特定记录是什么时候?那么这是一个问题。此外,您还有如何实施实际跟踪的问题(在我看来,这是另一个问题)。

【讨论】:

  • 请找到添加到问题的用例。
  • +1 并且您可以将表实现为索引组织表
  • @RobvanWijk - 我不同意物联网:我希望通过 USER_ID 和 RECORD_ID 进行访问,因此应该有两个索引,每个索引都作为前导列。上次我听说,Oracle 的建议仍然是不要在 IOT 上建立索引。
  • 我很好奇为什么甲骨文会建议不要在物联网上使用额外的索引。有链接吗?
  • @RobvanWijk - Tom 在他的一本书中讨论了物联网和二级索引,但我能在Use the Index Luke 上找到最清晰的在线内容。尽管 Richard Foote 提供了更细致入微的建议 here
猜你喜欢
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多