内存表引擎
备注
在 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
的下限。
示例
同时,对于行: