ebay の技術ブログとdatastax 開発者のブログの指針に従って、Cassandra 1.2 でいくつかのイベント ログ データをモデル化します。パーティション キーとして、「ddmmyyhh|bucket」を使用します。ここで、bucket は 0 からクラスター内のノード数までの任意の数です。
データモデル
cqlsh:Log> CREATE TABLE transactions (yymmddhh varchar, bucket int, rId int, created timeuuid, data map, PRIMARY KEY((yymmddhh, bucket), created) );
(rId は、イベントを発生させたリソースを識別します。) (マップは、JSON から派生したキーと値のペアです。キーは変更されますが、それほど多くはありません)
これは、1 時間あたり X バケットの複合プライマリ/行キーに変換されると思います。私の列名は timeuuids よりも優れています。このデータ モデルのクエリは期待どおりに機能します (時間範囲をクエリできます)。
問題はパフォーマンスです。新しい行を挿入する時間が継続的に増加します。だから私はs.thをやっています。間違っていますが、問題を特定できません。
行キーの一部として timeuuid を使用すると、パフォーマンスは高いレベルで安定したままになりますが、クエリを実行できなくなります (もちろん、行キーを使用しないクエリでは、「フィルタリング」に関するエラー メッセージがスローされます)。
何か助けはありますか?ありがとう!
アップデート
マップ データ型から定義済みの列名に切り替えると、問題が軽減されます。挿入時間は、挿入ごとに約 <0.005 秒にとどまっているようです。
「マップ」データ型の効率的な使用方法は? そして、キーのわずかな違いだけで何千もの挿入を効率的に行うにはどうすればよいでしょうか。
マップにデータを使用するキーは、ほとんど同じままです。各キーが追加の列を作成するか、「マップ」ごとに1つの新しい列を作成するか? それは... 私には信じがたいことです。