2

集合演算 (より具体的にはユニオン) を適切にサポートするデータベースを探しています。

私が欲しいのは、短い文字列のセットを格納し、そのようなセットの結合を計算できるものです。たとえば、A、B、および C をセットに追加し、次に D、および A を別のセットに追加してから、それらのセットの結合のカーディナリティ (4) を取得しますが、100 万倍程度にスケールアップします。

値は 12 文字の文字列で、セットのサイズは 1 要素から数百万の範囲です。

私は Redis を試してみましたが、すべての点で素晴​​らしいですが、私が持っているデータの量を考えると、メモリベースのものには注意が必要です。私は VM 機能を使用してみましたが、それはさらに多くのメモリを使用し、大きな値に向けたものであり、私は小さな値を持っています (Redis メーリング リストの親切な人々と言ってください)。陪審員はまだ出ていませんが、うまくいくかもしれません。

また、リレーショナル データベースの上に実装する方法もスケッチしましたが、これはおそらく機能しますが、私が求めているのは、機能するためにハックする必要のないものです。Redis は良い答えですが、上で述べたように、試してみました。

私の現在の Redis ベースの実装は、多かれ少なかれ次のように機能します。ログ ファイルを解析し、各行について、API キー、ユーザー ID、およびサイト ドメイン、時刻などの多数のプロパティの値を抽出します。次に、次のようなキーを定式化します (各行は、プロパティごとに 1 つずつ、多くのキーになります)。

APIKEY:20101001:site_domain:stackoverflow.com

キーはセットを指し、このセットにユーザー ID を追加します。すべてのログ ファイルを解析したら、これまでのプロパティの一意のユーザー ID の総数を知りたいので、Redis に一致するすべてのキーの和集合の基数を尋ねます。

APIKEY:*:site_domain:stackoverflow.com

Redis 以外に、このユース ケースを適切にサポートするデータベースはありますか?

4

1 に答える 1

1

boost::disjoint_set大規模な集合の和集合または交差点を取るために特別に最適化されたデータ構造であるようなものが必要なようです。

于 2010-10-01T07:46:30.460 に答える