数据缓存

配置数据缓存

Cassandra包含集成缓存并在集群周围分发缓存数据。当某个节点关闭时,客户端可以从另一个缓存的数据副本中读取数据。集成架构还有助于排除故障,因为没有独立的缓存层,缓存的数据与数据库中的数据完全匹配。集成的缓存通过将缓存定期保存到磁盘来缓解冷启动问题。Cassandra将内容读回缓存并在重新启动时分发数据。群集不会以冷藏缓存开始。

保存的密钥缓存文件包括文件名中的表的ID。键空间中的users表的保存密钥缓存文件名mykeyspace类似于:
mykeyspace-users.users_name_idx-19bd7f80352c11e4aa6a57448213f97f-KeyCache-b.db2046071785672832311.tmp

关于分区键缓存

分区键高速缓存是Cassandra表的分区索引的高速缓存。使用密钥缓存而不是依靠操作系统页面缓存减少了查找时间。只启用密钥缓存会导致磁盘(或操作系统页面缓存)活动实际读取所请求的数据行,但不启用密钥缓存会导致从磁盘读取更多内容。

关于行缓存

通过设置rows_per_partition表选项来配置要在分区中缓存的行数 。要缓存row ,如果row key不在缓存中,Cassandra将读取分区的第一部分,并将数据放入缓存中。如果新缓存的数据不包含用户配置的所有单元,则Cassandra将执行另一个读取。row缓存的实际大小取决于工作负载。您应该对您的应用程序进行适当的基准测试,以获得“the best”的row缓存大小配置。

有两个行缓存选项,旧的序列化缓存提供程序和一个新的卸载缓存(OHC)提供程序。新的OHC提供商的基准测试表现比旧版本好15%左右。

注意:使用适当的OS页面缓存会比使用行缓存带来更好的性能。

使用row key缓存和row缓存

通常,您为表启用partition key或row缓存。

  • 仅当读取次数大于写入次数(经验法则为95%)时才启用行缓存。考虑使用操作系统页面缓存而不是行缓存,因为写入分区会使缓存中的整个分区无效。

  • 完全禁用不常读取的归档表的缓存。

启用和配置缓存

使用CQL通过配置缓存表属性来启用或禁用缓存。在cassandra.yaml文件中设置参数以配置全局缓存属性:

  • 分区键高速缓存大小

  • 行缓存大小

  • Cassandra多久分配一次密钥缓存到磁盘

  • Cassandra多久将行缓存保存到磁盘
    配置row_cache_size_in_mb(位于cassandra.yaml 配置文件中)决定了Cassandra分配的内存空间,以便从表中最常读取的分区中存储行。

步骤

设置配置分区键高速缓存和行高速缓存的表高速缓存属性。

CREATE TABLE users (
  userid text PRIMARY KEY,
  first_name text,
  last_name text,
)
WITH caching = { 'keys' : 'NONE', 'rows_per_partition' : '120' };

有效缓存使用技巧

在Cassandra 2.1中调整行缓存描述了使用内置缓存机制和设计有效数据模型的最佳实践。有效缓存使用的一些提示是:

  • 将需求较低的数据或具有极长分区的数据存储在表中,而不需要缓存。

  • 在每个节点相对较轻的负载下部署大量的Cassandra节点。

  • 从逻辑上将严重读取的数据分离成离散的表格。

查询表时,打开跟踪来检查表实际上是从缓存而不是从磁盘获取数据。您第一次从分区读取数据时,跟踪在查询下面显示此行,因为缓存尚未填充:

Row cache miss [ReadStage:41]

在随后的同一分区查询中,在跟踪中查找如下所示的一行:

Row cache hit [ReadStage:55]

该输出意味着在缓存中找到了数据,并且没有发生磁盘读取。更新使缓存失效。如果查询缓存中的行和未缓存的行,请求比全局限制允许的更多的行,或者查询不抓取分区的开始,那么跟踪可能包含如下所示的行:

Ignoring row cache as cached value could not satisfy query [ReadStage:89]

此输出表示缓存不足导致磁盘读取。请求行不在分区的开始是可能的原因。尝试删除可能导致查询跳过分区开头的约束,或者对查询设置限制以防止结果溢出缓存。要确保查询命中缓存,请尝试增加缓存大小限制,或重新构建表以将频繁访问的行放在分区的开头。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值