我有超过 10 年的时间序列数据,有超过 3 万亿行和 10 列。
目前我使用具有 128GB RAM 的 PCIe SSD,我发现查询需要大量时间。例如,运行以下命令需要超过 15 分钟:
SELECT * FROM tbl WHERE column_a = 'value1' AND column_b = 'value2';
Run Code Online (Sandbox Code Playgroud)
该表主要用于读取。写入表的唯一时间是在每周更新期间插入大约 1500 万行。
管理如此大的表的最佳方法是什么?您会建议按年份拆分吗?
表大小为 542 GB,外部大小为 109 GB。
EXPLAIN (BUFFERS, ANALYZE)
输出:
"Seq Scan on table (cost=0.00..116820941.44 rows=758 width=92) (actual time=0.011..1100643.844 rows=667 loops=1)"
" Filter: (("COLUMN_A" = 'Value1'::text) AND ("COLUMN_B" = 'Value2'::text))"
" Rows Removed by Filter: 4121893840"
" Buffers: shared hit=2 read=56640470 dirtied=476248 written=476216"
"Total runtime: 1100643.967 ms"
Run Code Online (Sandbox Code Playgroud)
该表是使用以下代码创建的:
CREATE TABLE …
Run Code Online (Sandbox Code Playgroud) postgresql index database-design database-recommendation partitioning
数据库存储事件并显示这些事件的最终结果的想法对现实世界(以及实际发生的事情)来说是现实的。
鉴于事件溯源数据库提供的灵活性(例如,在不同时间点查看数据库),为什么此类数据库不流行?
例如,我所知道的唯一两个进行事件溯源的数据库是 Datomic 和 Event Store。