已经阅读了关于SO,外部博客文章和手册的几个问题
我仍然发现自己想知道是否应该考虑我的情况进行分区。
案例-简化
存储客户数据。为了清楚起见,下面提到的所有表名均已组成。
具有需要客户识别的非物理对象,以及需要将某些对象按需发送回客户或以其他方式进行处理的情况下,实际存储它们的物理对象。它们以多对多关系映射。
objects_nonphysical
,objects_physical
,objects_mapping_table
。第二个多对多关系是这些非物理对象与其度量之间的关系。有些对象与某些指标绑定。
metrics
,metrics_objects_nonphysical
非物理对象和物理对象都有其子级关系表。
objects_nonphysical_hierarchy
,objects_physical_hierarchy
根据每个客户的需求和要求,可以提供有关物理对象的数据,或者可能需要从头开始创建。基本上,我需要做的是:
保持内部系统的快速运行
INSERT
和SELECT
声明,因为这是要进行映射的地方。维护系统以供外部客户查看和操作其非物理对象 -快速检索数据。报表高效性的需求
SELECT
-许多客户可以随时使用此数据进行搜索。
我的考虑
可以有一个客户,他们可以访问数据,查看数据并对其进行操作,但是不必是我们从中获取数据/正在处理数据的承包商。
考虑到我总是知道应该将哪些分区数据归入(针对承包商的分区),然后考虑到需要为客户进行分区的外部客户的维护系统,这导致我将表分区引入到我的系统中(某些情况下可以做到这一点)延迟使用自动化工具和一组规则以客户的方式重写数据,因此对于每个客户,我们只为每个表扫描一个分区。
数据量
我的数据将不断增长,尤其是在导入新客户的对象和指标时。从长远来看,目前无法预测新数据进入系统的速度。确实,没有知道谁将成为下一个客户,就无法衡量它。眼下正好有2客户提供更多或更少的1M行对每个表的每个客户。但是将来我预计新客户也将有1000万行左右。
问题
这些问题都是相互关联的。
- 应该在这里真正考虑分区,还是过大?我认为它很有用,因为我始终只扫描一个分区。
- 如果要进行分区,那么如何
FK
考虑到我的需求最有效地实施约束?我应该选择constraint triggers
还是将其保留在内部系统的应用程序层中,或者使用其他方法? - 如果无法进行分区,那我应该深入研究什么呢?
如果没有足够的数据,请在下面的评论中让我知道。