
# ClickHouse应用开发简介
#### ClickHouse简介
ClickHouse是面向联机分析处理的列式数据库，支持SQL查询，且查询性能好，特别是基于大宽表的聚合分析查询性能非常优异，比其他分析型数据库速度快一个数量级。
****ClickHouse的设计**优点：**
- 数据压缩比高
- 多核并行计算
- 向量化计算引擎
- 支持嵌套数据结构
- 支持稀疏索引
- 支持数据Insert和Update
**ClickHouse的应用场景：**
- 实时数仓场景 使用流式计算引擎（如Flink）把实时数据写入ClickHouse，借助ClickHouse的优异查询性能，在亚秒级内响应多维度、多模式的实时查询分析请求。
  

- 离线查询场景 把规模庞大的业务数据导入到ClickHouse，构造数亿至数百亿记录规模、数百以上的维度的大宽表，随时进行个性化统计和持续探索式查询分析，辅助商业决策，具有非常好的查询体验。
  
 
#### ClickHouse开发接口简介
ClickHouse由C++语言开发，定位为DBMS，支持HTTP和Native TCP两种网络接口协议，支持JDBC、ODBC等多种驱动方式，推荐使用社区版本的[clickhouse-jdbc](https://github.com/ClickHouse/clickhouse-jdbc)来进行应用程序开发。
 #### 基本概念
- **cluster**
  cluster（集群）在ClickHouse里是一种逻辑的概念，它可以由用户根据需要自由地定义，与通常理解的集群有一定的差异。多个ClickHouse节点之间是一种松耦合的关系，各自独立存在。
  

- **shards**
  shard（分片）是对cluster的横向切分，1个cluster可以由多个shard组成。
  
- **replicas**
  replica（副本），1个shard可以由多个replica组成。
  
- **partition**
  partition（分区），针对的是本地replica而言的，可以理解为是一种纵向切分。
  

- **MergeTree**
  ClickHouse拥有非常庞大的表引擎体系，MergeTree作为家族系统最基础的表引擎，提供了数据分区、一级索引和二级索引等功能。在创建表的时候需要指定表引擎，不同的表引擎会决定一张数据表的最终"性格"，比如数据表拥有何种特性、数据以何种形式被存储以及如何被加载。
  
 
