2016-03-24 7 views
1

これは私の使用例です。カサンドラで更新後の古いバージョンのデータを選択

私は次のクエリとのCassandraのデータの行を挿入した:私は、新しい値を持つ1つの行を更新

INSERT INTO TableWide1 (UID, TimeStampCol, Value, DateCol) VALUES ('id1','2016-03-24 17:54:36',45,'2015-03-24 00:00:00'); 

update TableWide1 set Value = 46 where uid = 'id1' and datecol='2015-03-24 00:00:00' and timestampcol='2016-03-24 17:54:36'; 

ここで、このデータのすべてのバージョンをCassandraから見たいと思います。私はHBaseで知っている、これはかなり簡単ですが、カサンドラではこれも可能ですか?

私はwritetime()を使用して少し調べましたが、新しく更新されたデータの最新の時刻を示しています。これはwhere節でも使用できません。

これは私のスキーマがどのように見えるかされています

CREATE TABLE TableWide1(
    UID varchar, 
    TimeStampCol timestamp, 
    Value double, 
    DateCol timestamp, 
    PRIMARY KEY ((UID,DateCol), TimeStampCol) 
); 

ので、古いデータがまだカサンドラに存在するという事実を考えると、この技術的には可能でしょうか?最終的にパーティションの限界に達しますので、しかし

CREATE TABLE table_wide (
    UID varchar, 
    TimeStampCol timestamp, 
    Value double, 
    PRIMARY KEY ((UID), TimeStampCol) 
); 

ザッツ一般的に悪い:あなたのパーティションが文句を言わない広すぎる取得する場合

+1

いいえ、カサンドラは他のBig Tableの実装のようにセルの履歴を保持しません。 – Ralf

+0

必要に応じて手動で行う必要があります。私は私のテーブルの1つでそれを持っています。CMSでページの新しいリビジョンを作成するたびに、別のエントリとして保存します。そうすれば、どのバージョンにもアクセスできます。 –

答えて

-1

あなたは時間のパーティショニングを除外することができます。

本当にあなたはそれが正しいと思いました。あなたは1つのステートメントを作ることはできませんが、カバーの下では、とにかくセット全体をストリームすることはできません。それを通ってページングする必要があります。だから、毎日の結果を一度に1つずつ繰り返すことができます。データセットは、データのない日があり、読み込み無駄にしたくない場合は、データ

CREATE TABLE table_wide_partition_list (
    UID varchar, 
    DateCol timestamp, 
    PRIMARY KEY (UID) 
); 

そして、最初に1つのクエリを作成していた日にマークするために周りに追加のテーブルを維持することができます。

実際にスキャン用のHBaseのような動作が必要な場合は、おそらく通常のC *の代わりにOLAPスタイルのものを探していることでしょう。このため、現在、カッサンドラとスパークを使用することがほぼ普遍的に推奨されています。

-2

カサンドラは更新時に古いデータを保持しません。 古いデータをトゥームストーンにマークし、圧縮が行われたときにこれを取り除きます。

Hbaseは、リアルタイムアプリケーションの処理用に作られたものではありません。また、アプリケーションサーバーからの/からのホットデータもありません。 人々はHbaseを使用しています。これは、主にhadoopクラスタを持っているためです。

もう一つ目立つとの重要な違いは、データがハッシュされたキーに基づいて保存されているので、カサンドラは> 10 & & < 10のような範囲のキーではなく、に基づいて、単一/複数のレコードの検索に非常に高速です。一方、Hbaseはソートされた方法でデータを保存し、範囲クエリの理想的な候補です。

とにかく、cassandraは古いデータを保持しないためです。それを取得することはできません。

+0

実際、データはしばらくの間、墓石に残っていますが、アクセスできず、いつでも圧縮で削除することができます。 –

+0

データをしばらく墓石に入れたり、すぐに削除したりすることができます。それはあなたのコンパクションパラメータが何であるかによって異なります。また、実際には、sstablesをjsonに変換し、削除マークマーカーを削除することで、墓石としてマークされたデータを復元することは可能ですが、それはまったく別の領域です。 –

+0

@AbhishekAnand HBaseが適切なデータベースではないとはどういう意味ですか? – TechEnthusiast

関連する問題