主流数据库/数仓核心要点对比

  • ClickHouse:官网讲OLAP系统的特点,更像是讲自己的特点,比如关联查询只会有一个大表,写入都是批量等。
    Global关键字难于被普通用户理解,join的不足(只有broadcast join,没有repartition join),分布式表定义的繁琐。
    需要ZK存储一些元信息,没有master,各节点对等。
    对delete和upate支持很弱,无事务支持。
    可插拔存储引擎。稀疏索引。
    关于为什么快,官网解释说除了列存、索引、多种压缩之外,更在乎底层细节,比如和group by相关的hash数据结构,会有三十多种,适配不同的数据类型和场景。
  • HBase:随机IO,解决Hadoop体系点查和RT问题。存在scan的热点问题。
    强一致性。
    列族压缩,列族内qualifier随意扩展,所以有了OpenTSDB。
    它也是BigTable的开源实现。
    基于ZK选master leader,并处理region server心跳。
    有cache和wal。据说cache也有全局监控和刷盘策略。
  • Cassandra:基于Hash分kv,高并发点查无热点,但不便scan。
    采用Quorum NRW的一致性方式。
    Gossip去中心化,弱一致性。规模化和集群扩展性较好。
    算是DynamoDB的开源实现。
    有一定的事务性支持,以SQL的表格形式存储数据。
  • MongoDB:基于JSON格式的文档形式存储,每条数据有隐含的文档ID。
    Schema free。使用简单。
  • Kudu:和HBase比,更像传统的关系型数据库,而非NoSQL。也是更彻底的列存(和Parquet相似列存格式,增加了随机读写能力),整体上对AP系统来说更合适。
    强依赖主键,且主键不可修改。
    表数据分片为tablet基于raft多副本存储。
    只支持单行事务。
    master们自己根据raft选主,无需ZK,client需要从master获取tablet信息,并自己读取TServer。
    只是存储引擎,一般搭配Impala作为上层。
  • PostgreSQL:地理信息;SQL编程,PL/SQL,更接近Oracle;外部数据源;包括BTREE在内的多中类型索引;集群扩展性更好;事务隔离更好;子查询支持更好。
    而mysql胜在流行,并且在权限控制等方面更完善。
  • Presto/Impala:较为接近,都是大数据生态下的加速查询引擎。Presto为JAVA实现,Impala为C++实现。
  • Kylin:基于数据Cube的模型进行各个维度层次的下钻和上卷的预聚合,所以对于部分已知查询的性能会非常好。
  • Druid:适用于聚合查询场景但是不适合有超高基维度的场景;存储全维度group-by后的数据,相当于只存储了Kylin Cube的 Base-CuboID。

你可能感兴趣的:(数据库,数据仓库)