Stackoverflow コミュニティが、私の問題を解決するテクノロジ (つまり、HBase、Raiku、Cassandra など) を提案してくれるのではないかと思います。リアルタイムで更新してクエリしたい大規模なデータセットがあります。これは数十テラバイトのオーダーです。データセットは、ユーザー ID と 1 つ以上の機能 (通常は約 10) を含むピクセル ストリームです。可能な機能の総数は数百万です。
データモデルは次のようになると想像しています。
FEATUREID_TO_USER_TABLE : 機能 ID -> {UserID ハッシュ、UserID ハッシュ、...}
FEATUREID_TO_COUNTER_TABLE : 機能 ID -> { エピック以降の時間 -> HyperLogLog バイト blob }
ユーザー ID のハッシュによってソートされたユーザー ID のセットを保持したいと考えています。また、新しい ID のハッシュ値が低い場合に古い ID を削除する FEATUREID_TO_USER_TABLE エントリごとに最大で 200k を保持することも好みます。
ストアで次の操作をサポートする必要があります (必ずしも SQL で表現されているわけではありません)。
select FeatureID, count(FeatureID) from FEATUREID_TO_USER_TABLE where UserID in
(select UserID from FEATUREID_TO_USER_TABLE where FeatureID = 1234)
group by FeatureID;
と
update FEATUREID_TO_COUNTER_TABLE set HyperLogLog = NewBinaryValue where FEATUREID_TO_COUNTER_TABLE.id = 567
このデータをマシン間でシャーディングする最も簡単な方法は、ユーザー ID によるものだと考えています。
アイデアをありがとう、マーク