4

アプリの 1 日あたりのユニーク ユーザー数を計算する必要があります。

ユーザーを一意に識別する唯一の方法は、UUID を使用することです (これは外部から提供されるため、使用せざるを得ません)。

私の毎日のユーザー数は数百万ユーザーであることを知っています。

Redis でビットセットを使用して人口カウントを行いたいのですが、これを機能させるには、UUID を狭くして long に快適に収まるようにする方法が必要です。衝突の可能性は承知していますが、正確な数値は気にしていません。

Javaでこれを行った人はいますか? 私が求めているのは、UUID を long に収まるものに変換する方法です。

4

3 に答える 3

3

intまたはlongを生成するuuidのハッシュを生成し、それらを人口カウントに使用できます。

jedis redis ライブラリの「redis.clients.util.MurmurHash」を見てください。https://github.com/xetorthio/jedisで見つけることができます

*編集: サンプル

        UUID uuid = UUID.randomUUID();
        ByteBuffer buf = ByteBuffer.allocate(16).putLong(uuid.getMostSignificantBits()).putLong(uuid.getLeastSignificantBits());
        buf.flip();
        int useMe= MurmurHash.hash(buf, 123);
于 2012-07-27T14:41:11.883 に答える
3

UUIDオブジェクトには、役立つ可能性のある 2 つのメソッドがあります。

getLeastSignificantBits()getMostSignificateBits()。どちらも long を返します。これらの long の 1 つを答えにしてください (または、気にする場合は何らかの組み合わせを使用してください)。

于 2012-07-15T22:48:56.613 に答える
2

これはおそらく、完全な UUID をハッシュ キーとして直接使用するのに十分なほど小さいものです。必要に応じて、より少ないメモリを使用して近似を行うこともできます。

于 2012-07-16T02:18:45.117 に答える