Memory 表引擎
注意
在 ClickHouse Cloud 上使用 Memory 表引擎时,数据出于设计原因不会在所有节点之间复制。若要保证所有查询都被路由到同一节点,并使 Memory 表引擎按预期工作,可以采用以下任一方式:
- 在同一个会话中执行所有操作
- 使用通过 TCP 或原生接口(支持粘性连接)的客户端,例如 clickhouse-client
Memory 引擎以未压缩形式将数据存储在 RAM 中。数据以与读取时接收到的完全相同的形式存储。换句话说,从该表中读取几乎没有任何开销。 并发数据访问是同步的。锁的持有时间非常短:读写操作不会互相阻塞。 不支持索引。读取会被并行化。
在简单查询上可以达到最高性能(超过 10 GB/sec),因为没有磁盘读取、解压缩或数据反序列化的开销。(需要指出的是,在很多情况下,MergeTree 引擎的性能几乎同样高。) 当服务器重启时,表中的数据会消失,表将变为空表。 通常情况下,没有使用该表引擎的充分理由。不过,它可以用于测试,以及在行数相对较少(大约不超过 100,000,000 行)且对极致性能有要求的任务中。
Memory 引擎被系统用于带有外部查询数据的临时表(参见“External data for processing a query”一节),以及实现 GLOBAL IN(参见“IN operators”一节)。
可以指定上限和下限来限制 Memory 引擎表的大小,从而有效地使其充当一个环形缓冲区(参见 Engine Parameters)。
引擎参数
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 所定义的最低限制。
示例
另外,对于行: