已经阅读了关于 SO、外部博客文章和手册的几个问题
我仍然发现自己想知道是否应该考虑我的情况进行分区。
存储客户数据。为了清楚起见,下面提到的所有表的名称都是由组成的。
拥有可被客户识别且为非物理存在的对象,以及实际存储它们的物理对象,以备需要根据需要将某些对象发送回客户,或以其他方式对其进行处理。它们以多对多关系映射。objects_nonphysical
, objects_physical
, objects_mapping_table
.
第二个多对多关系是那些非物理对象与其度量之间的关系。有些对象与某些指标绑定。metrics
,metrics_objects_nonphysical
非物理对象和物理对象都有它们的层次表,它们是子父关系。objects_nonphysical_hierarchy
,objects_physical_hierarchy
根据每个客户的需要和要求,可以提供或可能需要从头开始创建有关物理对象的数据。基本上,我需要做的是:
维护快速INSERT
和SELECT
语句的内部系统,因为这里是映射发生的地方。
维护系统供外部客户查看和操作他们的非物理对象- 快速检索数据。对报表效率的强烈需求SELECT
- 许多客户可以随时搜索这些数据。
可以有一个客户,他可以访问数据、查看数据并对其进行操作,但这不需要是我们从中获取数据/正在为其处理数据的承包商。
这促使我将表分区引入我的系统,考虑到我总是知道应该属于哪个分区数据(承包商分区),然后为外部客户维护系统,我需要为客户分区(这将通过一些延迟使用自动化工具和一组规则以客户方式重写数据,以便对于每个客户,我们只扫描每个表的一个分区。
我的数据将不断增长,尤其是在导入新客户的对象和指标时。从长远来看,目前新数据进入系统的速度是不可预测的。在不知道谁将成为下一个客户的情况下,真的没有办法衡量它。眼下正好有2客户提供更多或更少的1M行对每个表的每个客户。但在未来,我预测新客户的数量也会达到1000 万行左右。
这些问题都是相互关联的。
假设我们需要检查 jsonb 列是否包含与任何值(非嵌套,仅第一级)中的子字符串匹配的特定值。
如何有效地优化查询以搜索JSONB
每个值的整个列?
是否有一些好的替代方法可以替代转换ILIKE %val%
为文本的 jsonb 数据类型?
jsonb_each_text(jsonb_column) ILIKE '%val%'
Run Code Online (Sandbox Code Playgroud)
例如,考虑以下数据:
SELECT '{"col1": "somevalue", "col2": 5.5, "col3": 2016-01-01, "col4": "othervalue", "col5": "yet_another_value"}'::JSONB
Run Code Online (Sandbox Code Playgroud)
当需要%val%
在列中包含不同键配置的记录中搜索模式时,您将如何优化这样的查询?是否有更好的替代方法来将每个键值对提取为文本并执行 ILIKE/POSIX 搜索?
主要是,我正在寻找一种不同的替代方法来将整个 jsonb 字段解压缩到单独的键行中,它们的值为 text。