【问题标题】:How to get_range for available rows in Cassandra?如何获取 Cassandra 中可用行的 get_range?
【发布时间】:2012-09-15 04:13:38
【问题描述】:

在我的应用程序中,我想获取列族中的所有行,但要忽略暂时不可用的行(例如,某些节点已关闭)。

我有多个节点。如果其中一个节点宕机了,那么get_range会抛出UnavailableException,我什么也得不到。

我想要的是获取当前可用的所有行,因为对于用户来说,这总比没有好。我该怎么做?

  • 我正在使用 pycassa。
  • 我的列族中的行键就像随机字符串,所以我不能使用get 来一一获取所有行。

【问题讨论】:

    标签: cassandra pycassa


    【解决方案1】:

    如果将get_range by token support 添加到 pycassa,您可以分别获取每个令牌范围(由describe_ring 报告),丢弃导致 UnavailableException 的那些。除此之外,正如 Dean 所说,使用一致性级别 ONE 是您的最佳选择。

    【讨论】:

    • 谢谢。如果加上这个功能,问题就可以彻底解决。就我而言,我发现我错误地使用了复制因子 1,这是我的问题的原因之一。
    • 令牌支持已添加到 pycassa 1.9.1 中的 get_range()。
    【解决方案2】:

    应该调用 get 来获取行键列表,这样您就不需要一个一个地获取它们。另外,如果您有索引,那会有所帮助。例如 playORM 对表的每个分区都有一个索引(您可以拥有任意数量的分区)。有了它,您就可以遍历每个索引并调用 get 传递一个键列表。

    另外,请确保您的一致性读取也设置为 ONE ;)。

    后来, 院长

    【讨论】:

    • 感谢您的帮助。但就我而言,行键就像随机字符串,所以在得到 get_range() 的响应之前,我不知道列族中有哪些行键。因此我无法将键列表传递给 get()。
    • 我假设您使用的是有序分区程序?如果你有一个索引,你就会有行键,如果你的表对于一个索引来说太大了,你可以有多个索引行,所以你“可以”获取行键并将它们全部发布给一个 get 或多个 get 可能会更好你想批量处理。
    猜你喜欢
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 2018-09-08
    相关资源
    最近更新 更多