我在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);
这将允许我做以下事情:
问题
但是,我不能在Cassandra做LIMIT 20,10而且我不能do this,因为我想在不同的计算机上分页。有没有机会我如何快速分页这些页面?