
# ClickHouse表引擎适用场景说明
ClickHouse中最强大的表引擎当属MergeTree（合并树）引擎及该系列其他引擎，根据业务场景选择合适的引擎。
#### 表引擎选择建议
- 自助报表分析、行为数据分析，在不涉及重复数据聚合的情况下，建议使用ReplicatedMergeTree表引擎。
- 涉及到物化视图等聚合函数的场景，建议使用ReplicatedAggregatingMergeTree表引擎。
- 经常有数据去重或有update修改数据的场景下，建议使用ReplacingMergeTree表引擎，配合使用argMax函数获取最新数据。
- 禁止使用Buffer表引擎。Buffer表引擎在重启、进程故障等场景下，无法保证数据的可靠性，存在数据丢失的风险。
  表1应用场景列表 
  | 引擎名称                         | 应用场景                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
  |:---|:---|
  | MergeTree                    | ClickHouse中最重要的引擎，基于分区键（partitioning key）的数据分区分块存储、前缀稀疏索引（order by和primary key）。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
  | ReplacingMergeTree           | 相对于MergeTree，它会用最新的数据覆盖具有相同主键的重复项。 删除老数据的操作是在分区异步merge的时候进行处理，只有同一个分区的数据才会被去重，分区间及shard间重复数据不会被去重，所以应用侧想要获取到最新数据，需要配合argMax函数一起使用。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
  | SummingMergeTree             | 当合并SummingMergeTree表的数据片段时，ClickHouse会把所有具有相同主键的行进行汇总，将同一主键的行替换为包含sum后的一行记录。 如果主键的组合方式使得单个键值对应于大量的行，则可以显著地减少存储空间并加快数据查询的速度。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
  | AggregatingMergeTree         | 该引擎继承自MergeTree，并改变了数据片段的合并逻辑。 ClickHouse会将一个数据片段内所有具有相同主键（准确的说是排序键）的行替换成一行，这一行会存储一系列聚合函数的状态。可以使用AggregatingMergeTree表引擎来做增量数据的聚合统计，包括物化视图的数据聚合。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
  | CollapsingMergeTree          | 在创建时与MergeTree基本一样，除了最后多了一个参数，需要指定Sign位（必须是Int8类型）。 CollapsingMergeTree会异步地删除（折叠）除了特定列Sign1和-1值以外的所有字段的值重复的行。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
  | VersionedCollapsingMergeTree | 是CollapsingMergeTree的升级，使用不同的collapsing算法，该算法允许使用多个线程以任何顺序插入数据。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
  | Replicated\*MergeTree        | 只有Replicated\*MergeTree系列引擎是上面介绍的引擎的多副本版本，为了提升数据和服务的可靠性，建议使用副本引擎： - ReplicatedMergeTree  - ReplicatedSummingMergeTree  - ReplicatedReplacingMergeTree  - ReplicatedAggregatingMergeTree  - ReplicatedCollapsingMergeTree  - ReplicatedVersionedCollapsingMergeTree  - ReplicatedGraphiteMergeTree   |
     
  
 
