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

Memory Table Engine

备注

在 ClickHouse Cloud 上使用 Memory 表引擎时,数据并不会跨所有节点复制(这是设计使然)。为了保证所有查询都路由到同一节点,并且 Memory 表引擎正常工作,您可以执行以下任一操作:

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

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

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

系统使用 Memory 引擎进行带有外部查询数据的临时表(参见“处理查询的外部数据”一节),并用于实现 GLOBAL IN(参见“IN 操作符”一节)。

可以指定上下限以限制 Memory 引擎表的大小,有效地使其作为循环缓冲区(参见 Engine Parameters)。

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

Usage

初始化设置

修改设置

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

Examples

还有,对于行: