刚刚发现在TDengine数据库中导入排序csv文件的速度比导入未排序csv文件的速度要快,每个csv文件有1000000行,唯一的区别是一个文件有时间戳排序,另一个文件没有排序时间戳。
任何人都可以解释为什么导入排序的csv文件更快?
taos> create table if not exists t1(ts timestamp, c1 int, c2 float, c3 int, c4 int);
Query OK, 0 of 0 row(s) in database (0.001659s)
taos> insert into t1 file 'unsorted.csv';
Query OK, 1000000 of 1000000 row(s) in database (2.025508s)
taos> create table if not exists t2(ts timestamp, c1 int, c2 float, c3 int, c4 int);
Query OK, 0 of 0 row(s) in database (0.001335s)
taos> insert into t2 file 'sorted.csv';
Query OK, 1000000 of 1000000 row(s) in database (0.994504s)
发布于 2022-03-29 02:11:54
我想原因是TDengine存储使用了LSM-树结构。由于导入的数据是时间序列数据,记录按主时间戳键排序。因此,编写有序的数据将利用LSM,因为数据只是附加到磁盘块。然而,对随机访问是有惩罚的。
发布于 2022-04-30 00:22:47
对于基于时间的数据库或数据结构来说,排序记录总是更好的。我认为这主要是根据您的业务场景--如果排序记录很容易生成,那么使用它,如果不是,让时间序列数据库(如TDengine)来处理它。
https://stackoverflow.com/questions/68564404
复制