我有一个用户表、事务表和 user_transaction 表。用户数约为 75,000 应用程序中可能的唯一事务数约为(事务表中的行在 1 到 300 万之间)。user_transaction 是上述两个表的连接,存储用户在什么日期和时间做了哪些事务。所以这个表对于 1 年的数据来说将是巨大的(我们将从表中清除活动数据并在 1 年后将其归档)年)。我们预计计数约为 50-6000 万行。这将是年底的最终数据大小。
我会说平均大小约为 3000 万条记录。此外,每晚导入作业都会更新所有这些表,这是在这些表中完成插入时的唯一部分,我们只能从我们的应用程序访问数据(使用选择查询)。
设计连接表以更快地从庞大的事务表中检索的最佳方法是什么?我们在表中添加了许多字段以对其进行反规范化并减少连接,并且几乎所有数据都仅在事务和 user_transaction 表中可用。
如果我们想对表进行分区,我们如何进行分区?该应用程序用于最频繁地查询更新的数据。
我们正在考虑按月对事务表进行分区,这样我们每个月就会有 1 个表。
我们考虑的其他选项是每周 1 天有 7 个表,但考虑到我们使用的是休眠,这大大增加了查询的复杂性。
我们如何设计大约 6000 万的巨大桌子
应要求提供更多详细信息:
我将不得不从模式中制作图表,同时这里还有更多信息:关系并不复杂,它大约有 4 个表:用户、事务、users_transaction、资源表。user_transaction 是包含所有其他三个表 id 的连接表,这将是一个巨大的表,因为它将在每个 id 上都有单独的条目,并且还会根据时间戳进行单独的条目。
目前该应用程序的用户数量非常少,例如 <20。(但将来可能会增长)。
表格的主要消费者是:
1)每周自审报告从这些表格中作为包含过去一周用户活动详细信息的电子邮件发送出去。这些将(最终)发送给 75,000 名用户,生成报告并为 1 个用户发送电子邮件目前大约需要 1 分钟(试验阶段的测试)。我们需要认真提高这方面的性能,以使每封电子邮件的时间少于 5 秒。这是一个在晚上运行的后端作业(最多应该消耗 3-4 小时)
2)包含图表的仪表板,这些图表显示了这些表格中的交易汇总视图。这些查询根据日期范围内的各个字段运行和汇总数据。因此,如果所有其他字段都相同(用户 ID、资源 ID、资源事件 ID、位置),我们计划汇总 user_transactions 表存储每天(不包括时间)的计数。
并根据月份对这些汇总表进行分区。(每个月一个)
需要注意的是:该解决方案应该适用于所有数据库(MySQL、DB2 等),而不仅仅是 oracle。
问候, Priyank Devurkar