MergeTree 类型正则表达式
主要特色:算法
该MergeTree系列(*MergeTree)的引擎和其余引擎是最强大的ClickHouse表引擎。数据库
该MergeTree系列中的引擎旨在将大量数据插入表中。数据迅速地逐部分写入表中,而后应用规则在后台合并这些部分。这种方法比插入期间连续重写存储中的数据效率更高。服务器
该引擎与MergeTree的不一样之处在于,它删除具备相同主键值(或更准确地说,具备相同排序键值)的重复条目。数据结构
重复数据删除仅在合并期间发生。合并发生在后台的未知时间,所以您没法为此计划。某些数据可能仍未处理。尽管您可使用OPTIMIZE查询运行计划外的合并,但不要期望使用它,由于OPTIMIZE查询将读取和写入大量数据。多线程
所以,ReplacingMergeTree它适合于在后台清除重复数据以节省空间,但不能保证不存在重复数据。并发
参考连接异步
引擎从MergeTree继承。区别在于,在合并SummingMergeTree表的数据部分时,ClickHouse会将全部具备相同主键(或更准确地说,具备相同排序键)的行替换为一行,该行包含数字数据类型的列的汇总值。若是排序键的组成方式是单个键值对应于大量行,则这将大大减小存储量并加快数据选择的速度。分布式
建议与一块儿使用引擎MergeTree。将完整数据存储在MergeTree表中,并SummingMergeTree用于汇总数据存储,例如,在准备报告时。这样的方法将防止您因为主键构成不正确而丢失有价值的数据。函数
引擎继承自MergeTree,更改了数据部分合并的逻辑。ClickHouse用存储聚合函数状态组合的单行(在一个数据部份内)用相同的主键(或更准确地说,用相同的排序键)替换全部行。
您能够将AggregatingMergeTree表用于增量数据聚合,包括聚合的物化视图。
引擎处理全部具备AggregateFunction类型的列。
AggregatingMergeTree若是按顺序减小行数,则适合使用。
该引擎继承自MergeTree,并将折叠行的逻辑添加到数据部分合并算法中。
CollapsingMergeTree若是排序键(ORDER BY)中的全部字段都相等,则异步删除(折叠)成对的行,除了Sign能够具备1和-1值的特定字段。没有对的行将保留。有关更多详细信息,请参见文档的“ 折叠”部分。
引擎能够显着减小存储量并所以提升SELECT查询效率。
该引擎:
容许快速写入不断变化的对象状态。
删除背景中的旧对象状态。这大大减小了存储量。
有关详细信息,请参见“ 折叠 ”部分。
引擎继承自MergeTree,并将用于折叠行的逻辑添加到用于合并数据部分的算法中。VersionedCollapsingMergeTree具备与CollapsingMergeTree相同的目的,可是使用了不一样的折叠算法,该算法容许以多个顺序以任何顺序插入数据。特别是,Version即便以错误的顺序插入行,该列也有助于正确折叠行。相反,CollapsingMergeTree仅容许严格连续插入。
该引擎旨在稀疏和汇总/平均(汇总)石墨数据。这对于但愿将ClickHouse用做Graphite的数据存储的开发人员颇有帮助。
若是不须要汇总,可是若是须要汇总使用,则可使用任何ClickHouse表引擎来存储Graphite数据GraphiteMergeTree。该引擎减小了存储量并提升了从Graphite查询的效率。
引擎从MergeTree继承属性。
适用于高负载任务的最通用和功能最强大的表引擎。这些引擎的共同特色是能够快速插入数据并进行后续的后台数据处理。 MergeTree系列引擎支持数据复制(使用Replicated* 的引擎版本),分区和一些其余引擎不支持的其余功能。
Log 类型
共同属性:
最简单的表引擎,用于将数据存储在磁盘上。每列都存储在单独的压缩文件中。写入时,数据将附加到文件末尾。
并发数据访问不受任何限制: - 若是同时从表中读取并在不一样的查询中写入,则读取操做将抛出异常 - 若是同时写入多个查询中的表,则数据将被破坏。
这种表引擎的典型用法是 write-once:首先只写入一次数据,而后根据须要屡次读取。查询在单个流中执行。换句话说,此引擎适用于相对较小的表(建议最多1,000,000行)。若是您有许多小表,则使用此表引擎是适合的,由于它比Log引擎更简单(须要打开的文件更少)。当您拥有大量小表时,可能会致使性能低下,但在可能已经在其它 DBMS 时使用过,则您可能会发现切换使用 TinyLog 类型的表更容易。不支持索引。
日志与 TinyLog 的不一样之处在于,"标记" 的小文件与列文件存在一块儿。这些标记写在每一个数据块上,而且包含偏移量,这些偏移量指示从哪里开始读取文件以便跳过指定的行数。这使得能够在多个线程中读取表数据。对于并发数据访问,能够同时执行读取操做,而写入操做则阻塞读取和其它写入。Log 引擎不支持索引。一样,若是写入表失败,则该表将被破坏,而且从该表读取将返回错误。Log 引擎适用于临时数据,write-once 表以及测试或演示目的。
具备最小功能的轻量级引擎。当您须要快速写入许多小表(最多约100万行)并在之后总体读取它们时,该类型的引擎是最有效的。
差别
Log 引擎为表中的每一列使用不一样的文件。StripeLog 将全部的数据存储在一个文件中。所以 StripeLog 引擎在操做系统中使用更少的描述符,可是 Log 引擎提供更高的读性能。
TingLog 引擎是该系列中最简单的引擎而且提供了最少的功能和最低的性能。TingLog 引擎不支持并行读取和并发数据访问,并将每一列存储在不一样的文件中。它比其他两种支持并行读取的引擎的读取速度更慢,而且使用了和 Log 引擎一样多的描述符。你能够在简单的低负载的情景下使用它。
Intergation engines 类型
用于与其余的数据存储与处理系统集成的引擎。 以上是其余数据存储类型引擎。
用于其余特定功能的引擎
分布式引擎自己不存储数据, 但能够在多个服务器上进行分布式查询。 读是自动并行的。读取时,远程服务器表的索引(若是有的话)会被使用。 分布式引擎参数:服务器配置文件中的集群名,远程数据库名,远程表名,数据分片键(可选)
用于实现实例化视图(有关更多信息,请参见CREATE TABLE)。为了存储数据,它使用在建立视图时指定的其余引擎。从表中读取时,它仅使用此引擎。
字典引擎将字典数据显示为ClickHouse表
合并引擎(不要与MergeTree混淆)不存储数据自己,但容许同时读取任何数量的其余表。读数自动并行化。不支持写入表。在读取时,若是存在,则使用实际正在读取的表的索引。合并引擎接受参数:数据库名称和表的正则表达式。
File表引擎以一种受支持的文件格式(TabSeparated,Native等)将数据保存在文件中。
用法示例:
写入Null表时,数据将被忽略。从Null表读取时,响应为空。
可是,您能够在Null表上建立实例化视图。所以,写入表的数据将最终出如今视图中。
始终位于RAM中的数据集。它旨在在IN运算符的右侧使用(请参见“ IN运算符”部分)。
您可使用INSERT将数据插入表中。新元素将添加到数据集,而重复项将被忽略。可是您不能从表中执行SELECT。检索数据的惟一方法是在IN运算符的右半部分使用它。
数据始终位于RAM中。对于INSERT,插入的数据块也将写入磁盘上表的目录中。启动服务器时,此数据将加载到RAM。换句话说,从新启动后,数据保留在原位。
对于服务器的从新启动,磁盘上的数据块可能会丢失或损坏。在后一种状况下,您可能须要手动删除数据损坏的文件。
准备在JOIN操做中使用的数据结构。
管理远程HTTP / HTTPS服务器上的数据。该引擎相似于文件引擎。
用于实现视图(有关更多信息,请参见CREATE VIEW query)。它不存储数据,而仅存储指定的SELECT查询。从表中读取时,它将运行此查询(并从查询中删除全部没必要要的列)。
内存引擎以未压缩的形式将数据存储在RAM中。数据以与读取时彻底相同的形式存储。换句话说,从该表中读取是彻底免费的。并发数据访问已同步。锁很短:读和写操做不会互相阻塞。不支持索引。读取并行化。经过简单的查询,能够达到最高的生产率(超过10 GB /秒),由于无需从磁盘读取,解压缩或反序列化数据。(咱们应该注意,在许多状况下,MergeTree引擎的生产率几乎同样高。)从新启动服务器时,数据从表中消失,而且表变为空。一般,使用此表引擎是不合理的。可是,它能够用于测试,
系统将内存引擎用于具备外部查询数据的临时表(请参见“用于处理查询的外部数据”部分),以及用于实现GLOBAL IN(请参见“ IN运算符”部分)
缓冲数据以写入RAM,并按期将其刷新到另外一个表。在读取操做期间,同时从缓冲区和另外一个表读取数据