首页 > 解决方案 > 相当于 cassandra 中 SELECT 的批处理语句

问题描述

我正在处理一个奇怪的问题,我不确定我的设计是否正确。我有一张看起来像这样的桌子

CREATE TABLE Content (
  group_id bigint,
  content_id bigint,
  metadata blob,
  group_payload blob static,
  PRIMARY KEY (group_id, content_id)

如您所见,它group_payload是静态的。如果我需要获取给定的所有数据,group_id我曾经这样做过

SELECT * FROM Content WHERE group_id = X;

但是,这group_payload会多次获取,并且会导致性能和内存问题,因为它是一个相当大的 blob。

结果,我将查询拆分为 2,如下所示

SELECT group_payload WHERE group_id = X limit 1;
SELECT metadata WHERE group_id = X;

这作为性能改进产生了奇迹,但它偶尔会受到竞争条件的影响,即我得到了group_payload,但是当我得到metadatagroup_payload已经过时了。

有没有办法“批处理” 2个选择查询。我应该捕获不一致并重试(数据允许检测到这一点),还是有更好的方法来完全做到这一点?

谢谢

标签: cassandra

解决方案


简短的回答 - 不 - 在 Cassandra 中没有批处理这样的东西,select在 Cassandra 中没有用于数据读取的快照隔离。

在您的情况下,我可能会考虑数据处理的逻辑-也许可以先获取所有元数据,然后再获取组有效负载?


推荐阅读