0

メジャーの分布を取得するために、Cassandra でカウンターを使用します。つまり、mysql でのグループ化と同様です。しかし、メジャーの一意の分布が必要な場合は、どうすればよいですか?

Web ページにアクセスするユーザーを毎日配布する必要があるとします。カウンターは非常に便利です。キーは日、値はカウンターになります。しかし、同じ Web ページについて - 一意のユーザー分布が必要な場合、Cassandra を使用してどのように達成できますか?

さまざまな方法で実装できます-書き込み前の読み取り、オフライン処理など。ビットマップ/ハイパーログログカウンターなどについても聞いたことがあります.Cassandraで/で使用できる最も簡単でシンプルなソリューションは、ユーザーの毎日の分布を一意に取得できます. 1 日あたり数百万のイベントがあります。

例:

2013 年 8 月 25 日に言う - これは私のウェブページのヒット数です - user1、user2、user1、user3

2013 年 8 月 26 日 - ユーザー 1、ユーザー 2

2013 年 8 月 27 日 - ユーザー 2、ユーザー 3、ユーザー 4

2013 年 8 月 28 日 - ユーザー 1、ユーザー 2、ユーザー 1、ユーザー 3

私の出力は

2013 年 8 月 25 日 - 3 人のユニーク ユーザー

2013 年 8 月 26 日 - 2 人のユニーク ユーザー

2013 年 8 月 27 日 - 3 人のユニーク ユーザー

2013 年 8 月 28 日 - 3 人のユニーク ユーザー

つまり、日数とユニーク ユーザーの数です。

ありがとう

4

3 に答える 3

0

のテーブル定義

CREATE TABLE user_day(
  day TEXT,
  user_id TEXT,
  user_count COUNTER,
  PRIMARY KEY (day,user_id));

次のように更新されました。

UPDATE user_day SET user_count = user_count + 1  WHERE day = '20130829' AND user_id = 'USER-1';
UPDATE user_day SET user_count = user_count + 1  WHERE day = '20130829' AND user_id = 'USER-1';
UPDATE user_day SET user_count = user_count + 1  WHERE day = '20130829' AND user_id = 'USER-2';
UPDATE user_day SET user_count = user_count + 1  WHERE day = '20130829' AND user_id = 'USER-2';
UPDATE user_day SET user_count = user_count + 1  WHERE day = '20130829' AND user_id = 'USER-1';
UPDATE user_day SET user_count = user_count + 1  WHERE day = '20130829' AND user_id = 'USER-3';

次に、両方を与えます:

SELECT * FROM user_day;

 day      | user_id | user_count
----------+---------+------------
 20130829 |  USER-1 |          4
 20130829 |  USER-2 |          2
 20130829 |  USER-3 |          1

と :

SELECT COUNT(*) FROM user_day WHERE day = '20130829';


 count
-------
     3

コメントする WRT、あなたが探しているのは、Cassandra がサポートしていない GROUP BY 関数です。AcunuDatastax Enterprise オファリングなどの有料オプションを検討できます。無料のオプションを探しているなら、アドホック クエリにはamplabs spark やsharkのようなものが最適ですが、Cassandra で個人的に使用したことはありません。

于 2013-08-29T10:09:20.063 に答える