首先要做的是创建一个表insertion_test
。然后我用:
SELECT create_hypertable('insertion_test', 'timestamp1');
我尝试用timestamp1
从2010-01-01 00:05:00
到2020-01-01 00:05:00
导入10个文件(每个文件包含100000行)来对插入进行基准测试,结果是PostgreSQL更快。为什么会发生这种情况?
请阅读有关"最佳实践"的部分。用于定义块的范围:
https://docs.timescale.com/timescaledb/latest/how-to-guides/hypertables/best-practices/
简而言之:您的块太小,导致在批量插入期间数据库开销过大,与单个表相比,(小)插入会降低性能。
数据库默认值是1周(您可以将其指定为create_hypertable
的可选参数),这意味着如果您从2010年到2020年插入100,000行文件,那么它将为这100,000创建~520个块,或者每个块少于200行。即使有10个文件,每个块仍然少于2000行。我们通常建议每个块以百万行为数量级。
此外,通过加载具有相同时间范围的10个文件,您将导致它"在时间开始时开始"。用第二次插入。请注意,假设您的总数据量很小——100万行——它永远不会达到"磁盘抖动"的程度。这方面我们已经讨论过了,但是对于较大的插入需要考虑:
https://blog.timescale.com/blog/13-tips-to-improve-postgresql-insert-performance/