在此示例中,列式数据库与 RDBMS 相比如何更快
In this example, how columnar database is faster compared to RDBMS
在这个例子中,像 Vertica
这样的 columnar
数据库比 rdbms
w.r.t 速度有何优势?
我假设 Symbol
和 date
是 primary key
w.r.t rdbms
从我下面的例子来看,投影看起来像下面这样,但我不明白为什么没有。读取次数较少
如果 tickstore 只有您在示例中使用的三列(并且实际上只有那时),面向行的 DBMS 可能会更快 - 特别是如果您有 symbol
和 date
索引.
但在任何其他情况下:列式数据库中的每一列(Vertica 是第一个广为人知的数据库)本身都归结为一个文件。因此,在 table 中有 103 列的情况下,面向行的 DBMS 从磁盘读取了 100 列,而 Vertica 只读取了 3 列;面向行的 DBMS 需要浏览完整的读取行以找到查询中所需的每一列的开始;并且 Vertica 可以依赖于每个列文件仅包含一种数据类型这一事实,并且可以优化读取和写入过程以利用该知识。
此外,还有针对列向数据的编码算法,这些算法会破坏此答案的 space 以在此处详细介绍。
总结一下:面向列的数据库唯一不喜欢的是 SELECT *
的 100 多列 table。
在这个例子中,像 Vertica
这样的 columnar
数据库比 rdbms
w.r.t 速度有何优势?
我假设 Symbol
和 date
是 primary key
w.r.t rdbms
从我下面的例子来看,投影看起来像下面这样,但我不明白为什么没有。读取次数较少
如果 tickstore 只有您在示例中使用的三列(并且实际上只有那时),面向行的 DBMS 可能会更快 - 特别是如果您有 symbol
和 date
索引.
但在任何其他情况下:列式数据库中的每一列(Vertica 是第一个广为人知的数据库)本身都归结为一个文件。因此,在 table 中有 103 列的情况下,面向行的 DBMS 从磁盘读取了 100 列,而 Vertica 只读取了 3 列;面向行的 DBMS 需要浏览完整的读取行以找到查询中所需的每一列的开始;并且 Vertica 可以依赖于每个列文件仅包含一种数据类型这一事实,并且可以优化读取和写入过程以利用该知识。
此外,还有针对列向数据的编码算法,这些算法会破坏此答案的 space 以在此处详细介绍。
总结一下:面向列的数据库唯一不喜欢的是 SELECT *
的 100 多列 table。