跳到主要内容
跳到主要内容

内存表引擎

备注

在ClickHouse Cloud上使用内存表引擎时,数据不会跨所有节点进行复制(这是设计使然)。为了确保所有查询路由到同一节点并且内存表引擎按预期工作,您可以执行以下操作之一:

  • 在同一会话中执行所有操作
  • 使用支持TCP或本地接口的客户端(这使得支持粘性连接),例如 clickhouse-client

内存引擎将数据存储在RAM中,未压缩形式。数据以接收时的相同形式存储。换句话说,从该表读取是完全免费的。 并发数据访问是同步的。锁很短:读写操作不会相互阻塞。 不支持索引。读取是并行的。

在简单查询上可达到最大生产力(超过10 GB/秒),因为不会从磁盘读取、解压缩或反序列化数据。(我们应该注意,在许多情况下,MergeTree引擎的生产力几乎一样高。) 重启服务器时,表中的数据会消失,表变为空。 通常情况下,使用此表引擎是没有意义的。然而,它可以用于测试,以及在相对较少的行(最多约100,000,000行)上需要最大速度的任务。

系统使用内存引擎进行具有外部查询数据的临时表(请参阅“处理查询的外部数据”部分),并用于实现 GLOBAL IN(请参阅“IN运算符”部分)。

可以指定上限和下限以限制内存引擎表的大小,从而有效地使其充当循环缓冲区(请参阅 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

用法

初始化设置

修改设置

注意: bytesrows 限制参数可以同时设置,但将遵循 maxmin 的下限。

示例

同样,对于行: