【发布时间】:2020-03-13 15:15:48
【问题描述】:
我正在使用一个大数据结构,它通过字符串标签描述项目树,例如文件系统中的路径字符串。有 ~198,000 个树元素和 ~9,100,000 个叶元素。
实施选项:
data type
ltree似乎是自然而然的选择。通过规范化表结构:为每条路径等创建序列索引和递归搜索
我假设在实施后,我可以通过EXPLAIN ANALYZE 比较两者。但是,在实施之前,是否可以预测差异或估计(速度和额外磁盘消耗)性能?
笔记和测试
关于查询(需求),它是开放的:“分层搜索引擎”必须具有表现力,当您用“字符串”表示分层信息时,ltree、正则表达式和有时 LIKE 运算符都具有表现力路径”。
使用具有 ~198,000 个树元素的 Guide 的类似 CREATE TABLE test (path ltree) 进行测试:
CREATE INDEX path_gist_idx ON test USING GIST (path)
; -- consumes ~3G
SELECT count(*) n
FROM test WHERE path ~ 'first.second.*.etc_etc_etc.*'
; -- n= 149068
EXPLAIN ANALYSE
SELECT count(*) n
FROM test WHERE path ~ 'first.second.*.etc_etc_etc.*'
; -- Planning Time: 0.075 ms
-- Execution Time: 1317.443 ms
【问题讨论】:
-
猜测性能是看手相。
-
嗨@LaurenzAlbe,谢谢....所以,我的猜测是正确的,
EXPLAIN ANALYZE(在开发替代解决方案之后)是唯一的方法。那么:删除问题还是等待“掌上阅读器”? -
如果您有路径字符串数据,
ltree绝对是最佳选择。除了数据量之外,您还期望什么波动,以及您要运行什么样的查询? -
谢谢@Bergi,我编辑了关于这个问题的注释......但是上下文是开放的,“数据挖掘”和“BI分析”,如此强大(最具表现力的分层运算符集)更好.