理解

数据库设计 = 数据存储模型 + 数据计算模型 + 查询接口模型

  • 数据存储模型落实在分布式存储平台,有些存储模型需要专用的存储平台支持
  • 数据计算模型落实在分布式计算平台,一种计算平台基本只实现一种计算模型
  • 查询接口模型是数据库提供服务的方式,如sql、kv等

  • 查询操作,是一种计算,因为查询除了简单的遍历,一定会提供更复杂的数据过滤和处理操作

  • 数据存储 与 数据计算是能够解耦的,如
    • Mysql代表的OLTP,数据存储使用的是本机文件系统,计算引擎是InnoDB等
    • Hive代表的OLAP,数据存储使用的是hdfs,计算引擎使用的是hadoop(除了hdfs的部分)
  • 数据库设计之初会根据面向场景,权衡决定:
    • 数据存储模型的通用程度、优化程度、索引冗余程度
    • 数据计算模型及各类编程优化手段
    • 提供的查询接口形式

辨析

Impala:

  • 存储平台:通用的HDFS或HBase
  • 存储模型:通用的Hive存储模型
  • 计算引擎:专用的impalad
  • 计算模型:OLTP式的任务分解、MPP架构、中间数据写内存
  • 查询接口:专用的SQL解析引擎
  • 特点:
    • 复用Hive存储相关,基于MPP思路单独实现计算引擎及计算模型
    • 优点:不使用MR + 内存计算所以快
    • 缺点:每台datanode都要承担计算任务(MPP特点);数据量受内存限制

Druid:

  • 存储平台:专用
  • 存储模型:专用
  • 计算引擎:专用
  • 计算模型:专用
  • 查询接口:阉割的SQL
  • 特点:
    • 数据需要导入druid,导入后即可查询
    • 计算引擎对数据根据时间维进行预聚合计算,提高查询响应速度
  • 优点:适合时序KPI数据
  • 缺点:专用系统的通病,且不支持全部sql查询功能

Drill:

  • 存储平台:通用
  • 存储模型:通用,可以使用HDFS文件、Hive表、mongodb等等
  • 计算平台:专用
  • 计算模型:专用
  • 查询接口:标准SQL
  • 特点:
    • 计算模型同样事针对SQL的任务规划,MPP架构
    • 优缺点类似Impala,但数据源要更加丰富,甚至直接查询json

Presto:

  • 存储平台:通用
  • 存储模型:通用,Hive等
  • 计算平台:专用
  • 计算模型:专用
  • 查询接口:标准SQL
  • 特点:
    • 计算模型同样事针对SQL的任务规划,MPP架构
    • 优缺点类似Impala,但数据源要更加丰富

Hawq:

  • 存储平台:通用
  • 存储模型:通用,Hive等
  • 计算平台:专用
  • 计算模型:专用
  • 查询接口:标准SQL
  • 特点:
    • 计算模型同样事针对SQL的任务规划,MPP架构
    • 优缺点类似Impala,但数据源要更加丰富

Kylin:

  • 存储平台:通用
  • 存储模型:专用
  • 计算平台:专用
  • 计算模型:专用
  • 特点:
    • kylin读取通用的源数据进行预计算生成数据cube存储到hbase,查询时直接查询cude从而加速
    • 优点:查询结果精确,查询性能稳定且快
    • 缺点:查询服务有单点,join查询性能有瓶颈;数据存储模型并不通用

Phoenix:

  • 存储平台:针对Hbase
  • 存储模型:通用kv
  • 计算平台:利用Hbase
  • 计算模型:利用Hbase
  • 查询接口:标准SQL
  • 特点:
    • Phoenix是专门针对Hbase的SQL方案,融入了Hbase从而在KV接口之上提供SQL查询接口
    • Phoenix将SQL查询翻译为多个Hbase的SCAN查询从而得到结果
    • 优缺点都来自于与Hbase的绑定

Hive:

  • 存储平台:HDFS
  • 存储模型:通用,其他数据库会尽量兼容Hive
  • 计算平台:通用
  • 计算模型:通用
  • 查询接口:阉割SQL
  • 特点:
    • 除了SQL引擎以外均的层次可通过插件替换
    • 优点:稳定
    • 缺点:慢,但Hive不受限于Hadoop引擎,同样可以运行在spark上

SparkSQL:

  • 存储平台:通用
  • 存储模型:通用
  • 计算平台:Spark
  • 计算模型:MR2
  • 查询接口:标准SQL
  • 特点:

    • 执行引擎限制为Spark,与Hive on Spark区别为SQL解析层不同,两者均比Hive on MR快很多很多

      思考

  • 限定最少层次的是Hive,仅有SQL引擎层,其余层次均可通用替换,灵活性最高,性能优化手段就没那么丰富

  • 其次是SQL引擎、计算引擎、计算模型都是专用的数据库,如Impala、Hawk、Drill、Presto、Trafodion、Tajo,大部分都采用了MPP架构思想,本节点处理本节点的数据,总体优劣就是MPP架构的优劣,微观优缺点有很多优化手段、功能丰富度可以对比
  • 然后是仅数据平台通用的数据库,如druid和kylin,都是通过预计算从而提高响应速度,总体优缺点来自于他们均针对特定场景的优化,场景对了很舒服,场景不一致就不舒服,特点鲜明
  • 最后是所有层次都是专用的数据库,比如elasticsearch,称其为搜索引擎更好,全部的专用也就导致一定要有足够的原因让使用者去专门另外搭建一个数据库集群,比如elk的全文检索能力