2

既存の MySQL ベースのアプリケーションを Cassandra に移行しています。これまでのところ、同等の Cassandra データ モデルを見つけるのは非常に簡単でしたが、次の問題に出くわしました。

何百万ものエンティティを保持する MySQL テーブルを考えてみましょう。

CREATE TABLE entities (
  id INT AUTO_INCREMENT NOT NULL,
  entity_information VARCHAR(...),
  entity_last_updated DATETIME,
  PRIMARY KEY (id),
  KEY (entity_last_updated)
);

更新が必要なエンティティについて、5 分ごとにテーブルがクエリされます。

 SELECT id FROM entities 
  WHERE entity_last_updated IS NULL 
     OR entity_last_updated < DATE_ADD(NOW(), INTERVAL -7*24 HOUR)
  ORDER BY entity_last_updated ASC;

このクエリによって返されたエンティティは、次のクエリを使用して更新されます。

 UPDATE entities 
    SET entity_information = ?, 
        entity_last_updated = NOW()
  WHERE id = ?;

指定された情報を保存し、更新が必要なエンティティ (つまり、過去 7 日間更新されていないエンティティ) を効率的にエンティティ テーブルにクエリできるようにする、対応する Cassandra データ モデルは何でしょうか?

4

2 に答える 2

2

あなたが説明したことを達成するには、タイムスタンプとして列名を持ち、開始時刻と終了時刻を使用してスライス取得関数を使用する必要があります。これにより、その範囲内の列名を持つすべての行が提供されます。また、列名の並べ替えを使用して、結果を時間順に並べ替えます。

于 2010-04-17T04:21:32.167 に答える
1

すべての行をスキャンし、関心のある列からタイムスタンプを取得する必要があります。これが毎日実行するものである場合は、Hadoop ジョブでこれを実行しても問題ありません。数分ごとに実行するものである場合は、別のアプローチを考え出す必要があります。

于 2010-03-31T15:01:56.087 に答える