内存表引擎
注意
在使用 ClickHouse Cloud 上的内存表引擎时,数据不会跨所有节点复制(按设计)。为了保证所有查询都路由到同一个节点,并且内存表引擎能够按预期工作,您可以执行以下操作之一:
- 在同一个会话中执行所有操作
- 使用使用 TCP 或原生接口(支持粘性连接)的客户端,例如 clickhouse-client
内存引擎以未压缩的形式将数据存储在 RAM 中。数据以与读取时接收到的完全相同的方式存储。换句话说,从该表读取是完全免费的。并发数据访问是同步的。锁是短的:读写操作不会相互阻塞。不支持索引。读取是并行化的。
在简单查询上可以达到最大的生产力(超过 10 GB/sec),因为没有从磁盘读取、解压缩或反序列化数据。(我们应该注意到,在许多情况下,MergeTree 引擎的生产力几乎一样高。)在服务器重新启动时,表中的数据会消失,表将变为空。通常,使用此表引擎是不合理的。但是,它可以用于测试,以及在相对较少数量的行(大约 100,000,000)上需要最大速度的任务。
内存引擎被系统用于带有外部查询数据的临时表(请参阅“外部数据用于处理查询”部分),以及用于实现 GLOBAL IN(请参阅“IN 运算符”部分)。
可以指定上限和下限来限制内存引擎表的大小,从而有效地使其充当循环缓冲区(请参阅 引擎参数)。
引擎参数
min_bytes_to_keep— 内存表大小受限时要保留的最小字节数。- 默认值:
0 - 需要
max_bytes_to_keep
- 默认值:
max_bytes_to_keep— 内存表中要保留的最大字节数,每次插入时删除最旧的行(即循环缓冲区)。最大字节数可能会超过声明的限制,如果删除的最旧的行批次在添加大型块时低于min_bytes_to_keep限制。- 默认值:
0
- 默认值:
min_rows_to_keep— 内存表大小受限时要保留的最小行数。- 默认值:
0 - 需要
max_rows_to_keep
- 默认值:
max_rows_to_keep— 内存表中要保留的最大行数,每次插入时删除最旧的行(即循环缓冲区)。最大行数可能会超过声明的限制,如果删除的最旧的行批次在添加大型块时低于min_rows_to_keep限制。- 默认值:
0
- 默认值:
compress- 是否在内存中压缩数据。- 默认值:
false
- 默认值:
用法
初始化设置
修改设置
注意: bytes 和 rows 限制参数可以同时设置,但是,将遵守 max 和 min 的下限。
示例
同样,对于行