2

私は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 を実行することはできません。また、別のコンピューターでページネーションを行いたいため、これを実行することもできません。これらのページをすばやくページ分割する方法はありますか?

4

0 に答える 0