Cassandra的分布式分页

时间:2016-02-14 09:45:26

标签: cassandra pagination distributed-computing cassandra-2.2 nosql

我在cassandra中搜索分页并在此处找到了这个完美的主题:Results pagination in Cassandra (CQL),其中this answer被大多数人接受。但我想在多台计算机上做同样的事情。我将提供一个例子......

问题

假设我有三台计算机连接到同一个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而且我不能do this,因为我想在不同的计算机上分页。有没有机会我如何快速分页这些页面?

0 个答案:

没有答案