私はcassandraでページネーションを探していましたが、ここでこの完璧なトピックを見つけました: Results pagination in Cassandra (CQL)、この回答は大多数の人々に受け入れられています。しかし、複数のコンピューターで同じことをしたいです。例を挙げます...
問題
同じ cassandra DB に接続されている 3 台のコンピューターがあるとします。各コンピューターは、次のテーブルからいくつかの行を取得する必要があります。
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)。
- 他の 2 台のマシンのロックをすばやく確認し、未使用のページを計算用に取得します
- より高速なコンピューターでより多くのページを取得してロックする
- すべてのページが処理された後、指定されたパーティション キーのすべてのロックを削除します
質問
ただし、Cassandra で LIMIT 20,10 を実行することはできません。また、別のコンピューターでページネーションを行いたいため、これを実行することもできません。これらのページをすばやくページ分割する方法はありますか?