内存中层概览

内存中层是一项集群级设置,使用专用节点。 在阅读本页内容之前,请先了解 实例、集群和 节点。 我们还建议您熟悉相关 限制

Bigtable 内存中层 是 Bigtable 节点的一部分,是一个集成内存层,可根据访问模式和性能需求实现无缝、经济高效的数据分层,所有操作都通过单个 API 完成。Bigtable 内存中层使用远程直接内存访问 (RDMA),可显著缩短响应时间,缓解热点问题,并针对延迟敏感型数据提供高吞吐量保障。如需了解详情,请参阅 了解性能

何时使用内存中层

我们建议您针对以下使用场景启用内存中层:

  • 亚毫秒级延迟要求:需要读取 延迟低于 1 毫秒的工作负载,通常通过在数据库前面使用 自行管理的缓存解决方案来解决。
  • 高吞吐量点读取:对特定数据子集有高读取流量 吞吐量要求的应用。
  • 缓解热点问题:高吞吐量工作负载,可能包含特定行键上的流量 峰值或热点。
  • 优化费用:您希望通过将高读取量卸载到更经济高效的内存中层来减少 Bigtable 节点的数量。

内存中层的工作原理

内存中层支持由 混合存储节点 提供。这些专用节点扩展了 Bigtable 的计算和存储分离,以包含具有纵向可伸缩吞吐量的内存层。 Bigtable 最多可能需要 30 分钟来预配专用内存中层节点。在此期间,Bigtable 会继续处理来自永久性存储空间的流量。

您可以在集群级别 启用内存中层。

内存中层的运作方式如下:

  • 在内存层中获取数据:内存中层提供直读式 缓存行为。通过为内存中层配置的应用配置文件执行读取操作时,行会进入内存层。如果行数据已在内存中层中,则来自任何应用配置文件的写入操作都会更新内存层。
  • 逐出和失效政策:内存中层在行级别使用最近 最少使用 (LRU) 逐出,并应用存留时间 (TTL) 失效政策,以最大限度地提高内存中层的命中率。
  • 负缓存:内存中层会记住资源是否在一段时间内缺失 以防止后端过载。
  • 安全性:内存中层支持静态加密和传输中加密 (TLS)。
  • 复制:在多集群实例中,不同 集群的内存层不会同步。由于每个内存层都会根据收到的读取流量独立确定要加载到内存中的数据,因此不同集群的内存层中可能包含不同的行键。 Bigtable 会从本地集群的 SSD 层将数据加载到内存中。对行的写入最终会按照最终一致性的标准 Bigtable 复制模型,在所有包含该行的内存层中更新该行。
  • 纵向自动扩缩:内存中层支持 节点级纵向自动扩缩 ,可与 Bigtable 自动扩缩协同工作。

内存中层针对高性能访问当前数据进行了优化。为了保持这种性能,内存层中仅保留行的最新时间戳版本。对较早版本数据的请求(也称为 历史单元格)会自动绕过内存层,并从 永久性存储空间提供服务。

数据一致性

Bigtable 可确保内存中层数据与 SSD 或非频繁访问存储层上的永久性数据保持一致。借助这种混合架构,Bigtable 可以在所有存储层中提供一致的存储模型,让您能够通过相同的语义接口访问数据,无论数据实际驻留在 RAM 还是永久性存储空间中。启用 Bigtable 内存中层后,您可以在集群级别保留读己所写一致性。

纵向伸缩

启用内存中层后,每个节点都可以使用纵向 伸缩 来修改其内存中层吞吐量容量。每个节点都包含 8 GB 的 RAM 用于内存中层,并以每秒 4 万次读取的基本容量开始。为了管理点读取流量的激增,节点可以自动以每秒 4 万次读取的增量进行扩缩,每个节点最多可达到每秒 12 万次读取。

此纵向伸缩功能与 Bigtable 自动伸缩集成。如果集群中所有节点都达到了内存中层的最大容量,并且自动扩缩处于活跃状态,则 Bigtable 会自动预配更多节点,以进一步提升内存中层的吞吐量。

节点上的纵向伸缩仅适用于内存中层的每秒读取次数,无论是否启用集群级自动伸缩,它都可以正常工作。超出每秒 4 万次读取的基本容量的纵向伸缩将按节点每小时费用的倍数收费。如需了解详情,请参阅 价格限制

限制

内存中层存在以下限制:

  • 内存中层需要 SSD 存储空间。
  • 内存中层仅支持单行级点读取操作。
  • 内存中层不提供数据扫描服务,也不支持 SQL 查询。
  • 内存中层应用配置文件仅支持单集群路由。
  • 内存中层将行大小限制为每个行键 1 MiB。Bigtable 会从永久性存储空间读取超出此限制的行。
  • 内存中层需要以下版本的 Bigtable 客户端库

    • Java 2.77.0 版或更高版本
    • BOM 26.80.0 版或更高版本
    • Go 1.52.0 版或更高版本

    不支持其他客户端库。

  • 启用了客户管理的加密密钥 (CMEK) 的集群不支持内存中层。

  • 内存中层每个集群最多只能使用 10 个节点。

后续步骤