2012-03-13 10 views
2

おそらく他の場所で説明されていることを私に許してもらえますが、私はカサンドラでデータモデルを設計するのに問題があります。カサンドラデータモデルのアプローチ

取引を保存しています。これらのトランザクションには、それぞれソース(ユーザー)、タイムスタンプ、および関連するキーワードがあります。ソースと日付範囲と(オプションの)キーワードを指定してトランザクションを見つけることができる必要があります。私は何十億というトランザクションを保存する必要があるため、カサンドラは魅力的です。

このようなことを行う方法を説明するリソースが見つかりませんでした。私の最初の考えは、トランザクションCF、keyword_transaction CF、source_transaction CF、および可能なday_transaction CF(または同様のもの)のようないくつかのCFを持つことです。これにより、上記の項目のいずれかに基づいてトランザクションを見つけるのは非常に簡単ですが、上記の項目すべてを検索できるようには見えません。

どのような考えですか?

答えて

3

まず、クエリを考えてからデータモデルを考えてみましょう。データモデルを計画するときは、herehereをこのヘルプとしてお読みください。

cf : transactions 
rowkey : source/uuid (suggestion) 
    cn : source 
    cv : UTF8 
    cn : keyword 
    cv : UTF8 
    cn : date 
    cv : DateType 
    cn : time 
    cv : DateType 


cf : keywords 
rowkey : keyword 
    cn : source 
    cv : UTF8 

トランザクションと、いくつかの列名(cn)とそれに対応する列値(cv)という標準列ファミリがあります。これらのトランザクションのそれぞれは、行キーによって識別されます。別の標準列ファミリは、行キーがキーワードとなるキーワードです。

ソース、タイムスタンプ、またはキーワードで検索できますが、クエリが機能するにはindexが必要です。上記提案のデータ構造を持つたとえば、あなたは、これらの操作を行うことができます。

  • は、ソースは「と、あなたの日付> '「
     
        get transactions where source = '' 
    
  • はソースがに等しいすべてのトランザクションを取得」」に等しいすべてのトランザクションを取得「
     
        get transactions where source = '' and date > ''; 
    
  • は、日付のすべての取引を取得するX
     
        get transactions where date = ''; 
    
  • キーワードに基づいて、すべてのソース名を取得
     
        get keywords['keyword']; 
    
+0

私は同様の質問をするためにここに来ました。私はこの解決策にも達しましたが、「ホットスポット」への言及が不十分なため、私はそれに満足していません。パーティションキーであるため、すべてのデータは単一のノードに移動します。私はこれが避けられるかどうか、 "source = 'foo'やtime> t0、time

+0

この質問はOPによって尋ねられました。かなり前に起こったことです。上記のカサンドラ - クリ氏さえもこの瞬間には好意的ではありません。 preferメソッドはvia cqlshを使用します。つまり、データを別のサーバーに保存する場合は、ホットスポットの印象をどのように取得するのか分かりません。 key1 || foo、key1 || barこれをハッシングすると、異なるサーバーにストアされますか?しかし、我々は約300~400GBの安定した各ノード負荷の生産データを持っています。ホットスポット?あなたが今言及するまで気づかず、気にもしません。 – Jasonw

+0

私は今cqlshについて言及しています。だから、この時点でcql spec 3.0以降をチェックしてください.casandraバージョン1.2と2.0以降では、cqlサポートの傾向が改善されています。 http://cassandra.apache.org/doc/cql3/CQL.htmlとhttp://www.datastax.com/dev/blog/lightweight-transactions-in-cassandra-2-0をお読みください。あなたの正確な質問はわかりませんが、私のコメントに基づいてアイデアを得ることを願っています。 – Jasonw

関連する問題