zoukankan      html  css  js  c++  java
  • 列式数据库的一些特点

    1. 适合于大数据分析

    1.1 高效的存储空间利用率

    行式数据库按行存储,每行包含的数据类型(列)不同,其每列存储数据所需的长度也不同,数据更新时,容易出现一行数据跳到另一个BLOCK上去,因此按行存储需要预留一定的存储空间。列式数据库由于适合大数据分析,数据是密集存储的,因此不需要考虑数据更新的问题。

    1.2 便于压缩

    列式数据库由于其每一列都是分开储存的。所以很容易针对每一列的特征运用不同的压缩算法

    1.3 不可见索引

    列式数据库由于其数据的每一列都按照选择性进行排序,所以并不需要行式数据库里面的索引来减少IO和更快的查找值的分布情况。当数据库执行引擎进行where条件过滤的时候。只要它发现任何一列的数据不满足特定条件,整个block 的数据就都被丢弃。另外在已经读取了可能的数据块之后,对于类似age<65或job=‘Axx’的,列式数据库并不需要扫描完整个block,因为数据已经排序了。如果读到第一个age=66 或者 Job = ‘Bxx’ 的时候就会停止扫描了。这相当与行式数据库索引里的范围扫描

    1.4 数据迭代

    现在的多核CPU 提供的L2缓存在短时间执行同一个函数很多次的时候能更好的利用CPU的二级缓存和多核并发的特性。而行式数据库由于其数据混在一起没法对一个数组进行同一个简单函数的调用,所以其执行效率没有列式数据库高。

    1.5 延迟物化

    列式数据库由于其特殊的执行引擎,在数据中间过程运算的时候一般不需要解压数据而是以指针代替运算,直到最后需要输出完整的数据时。

    (from McKnight : Columnar Database : Data Does the Twist and Analytics Shout)

    传统的行式数据库运算,在运算的一开始就解压缩所有数据,然后执行后面的过滤,投影,连接,聚合操作而列式数据库的执行计划却是这样的。

    (from McKnight : Columnar Database : Data Does the Twist and Analytics Shout)

    在整个计算过程中,无论过滤,投影,连接,聚合操作,列式数据库都不解压数据直到最后数据才还原原始数据值。这样做的好处有减少CPU 消耗,减少内存消耗,减少网络传输消耗,减少最后储存的需要。

    2. 列式数据库缺点:

    • 不适合扫描小量数据
    • 不适合随机的更新
    • 批量更新情况各异,有的优化的比较好的列式数据库(比如Vertica)表现比较好,有些没有针对更新的数据库表现比较差。
    • 不适合做含有删除和更新的实时操作

    http://www.csdn.net/article/2012-05-31/2806184

    Always go with the choice that scares you the most, because that's the one that is going to require the most from you!
  • 相关阅读:
    周总结(第十一周)
    周总结(第十周)
    周总结(第九周)
    周总结(第八周)
    周总结(第七周)
    周总结(第六周)
    周总结(第5周)
    周总结(第四周)
    周记
    补周记
  • 原文地址:https://www.cnblogs.com/sanquanfeng/p/3051001.html
Copyright © 2011-2022 走看看