2

我在 cassandra 中搜索 pagination 并在这里找到了这个完美的主题:Results pagination in Cassandra (CQL)这个答案被大多数人接受。但我想在多台计算机上做同样的事情。我举个例子...

问题

假设我有三台计算机连接到同一个 cassandra DB。每台计算机都想从下表中取几行:

CREATE TABLE IF NOT EXISTS lp_webmap.page (
    domain_name1st text,
    domain_name2nd text,
    domain_name3rd text,
    location text,
    title text,
    rank float,
    updated timestamp,
    PRIMARY KEY (
        (domain_name1st, domain_name2nd, domain_name3rd), location
    )
);

每台计算机只占用很少的行并为它们执行耗时的计算。对于固定的分区键(domain_name1st、domain_name2nd、domain_name3rd)和不同的集群键(位置),仍然可以有数千个结果。

现在问题来了......如何快速锁定几行与那台计算机1正在为其他计算机工作?

无法使用的解决方案

在标准 SQL 中,我会使用如下内容:

CREATE TABLE IF NOT EXISTS lp_registry.page_lock (
    domain_name1st text,
    domain_name2nd text,
    domain_name3rd text,
    page_from int,
    page_count int,
    locked timestamp,
    PRIMARY KEY (
        (domain_name1st, domain_name2nd, domain_name3rd), locked, page_from
    )
) WITH CLUSTERING ORDER BY (locked DESC);

这将允许我执行以下操作:

  • 选择计算机 1 上的前 10 页并锁定它们(page_from=1,page_count=10)
  • 快速检查其他两台机器上的锁并获取未使用的页面进行计算
  • 在速度更快的计算机上获取并锁定更多页面
  • 处理完所有页面后删除给定分区键的所有锁

问题

但是,我不能在 Cassandra 中执行 LIMIT 20,10 并且我也不能这样做,因为我想在不同的计算机上进行分页。有没有机会如何快速分页浏览这些页面?

4

0 回答 0