記事ディレクトリ
集計された統計 (セット -> 共通の友達)
複数の収集要素の集計結果をカウントすることは、前述の交差と他の収集統計です
-
コレクション アプリケーションのコマンド
統計の並べ替え (zset->コメントの並べ替え)
Douyinショートビデオの最新のコメントとメッセージのシーンの表示リストを設計してください
データ構造と設計のアイデアを検討する
- 最新の一覧やランキングなどを表示したい場合や、データの更新頻度が高い場合やページ表示が必要な場合はZSetのご利用をおすすめします
バイナリ統計 (ビットマップ -> サインインおよびパンチイン)
set 要素の値は 0 と 1 のみです
-
ケース
- 毎日の統計
- 連続チェックイン
- 先週のアクティブ ユーザー
- 指定したユーザーの年間ログイン日数をカウントする
- 1 年 365 日のうち、ユーザーがログインした日は? ログインしていない日は? 年間で何日ログインしたか?
-
ビットマップ データ型
詳細については、https: //blog.csdn.net/al6nlee/article/details/129822586を参照してください。
- つまり、0 と 1 の状態で表されるバイナリ ビットのビット配列
-
JingdongサインインしてJingdouを収集する
1 バイト、1 バイト、4 バイト、正確に 32 ビット、1 か月で最大 31 日、sonice
カーディナリティ統計 (hyperloglog->10 億レベルの UV 統計スキーム)
セット内の一意の要素の数を数える
-
業界用語
- 紫外線
- 固有の訪問者、独立した訪問者、一般にクライアント IP として理解される
- 再考する必要がある
- PV
- ページ ビュー、ページ ビュー
- 重複排除する必要はありません
- DAU(デイリーアクティブユーザー)
- 1 日のアクティブ ユーザー数 -> ログインまたは製品を使用したユーザー数 (繰り返しログインしたユーザーを除外)
- 多くの場合、Web サイト、インターネット アプリケーション、またはオンライン ゲームの操作を反映するために使用されます。
- いつも
- 月間アクティブ ユーザー数
- 紫外線
-
hyperloglog データ型
詳細については、https: //blog.csdn.net/al6nlee/article/details/129822586を参照してください。
- つまり、hyperloglog は、コレクション内の一意の要素の数であり、脱水後の実際のデータです。
-
ハイパーログ原理
-
導入
数十億のデータの統計
トラバース -> ビットマップ
- 1億個のデータの基数を数える場合、約100000000/8/1024/1024、約12Mのメモリが必要となり、メモリ使用量の削減効果は顕著です。
- このように、対象サンプルをカウントするベース値を取得するには、12M かかります。
- 10,000オブジェクトのサンプル(100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000
- bitmaps メソッドは正確に計算されます
ビットマップ -> HyperLogLog
- 確率アルゴリズムはデータ自体を直接格納するのではなく、誤差が一定の範囲内にあることを保証しながら、一定の確率と統計的手法によって基準値を推定するため、絶対的な精度を必要としないシナリオで使用できます。データを保存しないため、メモリを大幅に節約できます。
- HyperLogLog は確率的アルゴリズムの実装です
-
意味
これは非反復カーディナリティ統計専用であり、コレクションではなく、データを保存せず、特定のコンテンツではなく数量のみを記録します
- Hyperloglog は不正確な重複排除カウント スキームを提供します
- スペースと引き換えに精度を犠牲にすると、誤差はわずか約 0.81% です。
-
-
淘宝網のホームページにある10億レベルのUVに対するRedisの統計スキーム
-
必要
- UV 統計は重複を排除する必要があり、ユーザーによる 1 日の複数回の訪問は 1 回としてカウントされます
- タオバオやTmallのホームページのUVは1日平均1億~1億5千万程度
- 毎日1億5000万個のIPが保存されており、訪問者が来たら存在するかどうかを確認し、存在しない場合は参加します
-
プログラムディスカッション
-
mysqlは直接無視します
-
Redis ハッシュ データ型 -> bigkey になります
<keyDay,<ip,1>>
- ipv4 の構造上、各 ipv4 アドレスは最大 15 バイト (ip="192.168.111.1"、最大 xxx.xxx.xxx.xxx) です。
- 1 億 5,000 万 * 特定の日の 15 バイト = 2G、1 か月で 60G
-
ハイパーログ
保存原理
-
-
地理座標 (GEO)
-
緯度と経度
国際的な規則では、イギリスのグリニッジ天文台の元の場所を通る子午線を 0°としているため、子午線は本初子午線とも呼ばれます。地球上では、経線は南北方向を示し、緯線は東西方向を示します。
東半球と西半球の境界線:東経160度西経20度
- 経度: 東経は正の数値、西経は負の数値です。東と西
- 緯度: 北緯は正の数値、南緯は負の数値です。北緯と南緯
-
住所の緯度と経度を取得する
-
GEO データ型
詳細については、https: //blog.csdn.net/al6nlee/article/details/129822586を参照してください。
-
Meituanの近くのホテルの地図の場所をプッシュ
必要
ブルームフィルター
面接の質問
- 現在、50億の電話番号があり、10万の電話番号があります.これらの電話番号がすでに存在するかどうかを迅速かつ正確に判断するにはどうすればよいですか?
- 存在するかどうかで判断すると、ブルームフィルターについて理解できましたか?
- URL に安全に接続し、世界中の何十億もの URL を判断します
- スパムを識別するためのブラックリスト検証
- ホワイトリスト検証、その後の処理のために正当なユーザーを識別する
意味
初期値がゼロのビット配列と複数のハッシュ関数で構成され、要素がセットに存在するかどうかをすばやく判断するために使用されます
- 大規模なコレクションに特定のデータが存在するかどうかをすばやく取得する
目的 | メモリ使用量を減らす |
---|---|
道 | データ情報を保存せず、存在するかどうかにかかわらず、メモリ内にフラグを立てるだけです |
バックグラウンド
ブルーム フィルター (英語: Bloom Filter) は、1970 年にブルームによって提案されました。
これは実際には非常に長いバイナリ配列 (00000000...) +一連のランダム ハッシュ アルゴリズム マッピング関数であり、主に要素がセット内にあるかどうかを判断するために使用されます。
通常、特定の要素が特定のコレクションに含まれているかどうかを判断する必要があるビジネス シナリオに遭遇することがよくあります.一般的な考え方は、コレクション内のすべての要素を保存し、比較して判断することです.
リンクされたリスト、ツリー、ハッシュ テーブルなどのデータ構造は、すべてこの種の考え方です。しかし、コレクション内の要素の数が増えるにつれて、必要なストレージ スペースも直線的に増加し、最終的にはボトルネックに到達します。同時に、検索速度はますます遅くなっており、上記の 3 つの構造の検索時間の複雑度は、それぞれ O(n)、O(logn)、O(1) です。このとき、Bloom Filter (ブルーム フィルター) が誕生しました。
効果
-
挿入とクエリを効率的に行い、占めるスペースを減らし、不確実で完全ではない結果を返します
目的 メモリ使用量を減らす 道 データ情報を保存せず、存在するかどうかにかかわらず、メモリ内にフラグを立てるだけです -
集中
- 判定結果の場合の要素:存在する場合、その要素が存在するとは限らない
- ただし、判定の結果、存在しない場合は、存在してはならない。
-
ブルームフィルターは要素を追加できますが、要素を削除することはできません → ハッシュコードの判断基準が関係しているため、要素を削除すると誤判断率が高くなります。
基本原則
Bloom Filter は、重複排除の問題を解決するために特別に設計された高度なデータ構造です。
本質は、大きなビット配列といくつかの異なる偏りのないハッシュ関数です (偏りのないということは、均一な分布を意味します)。初期値がゼロのビット配列と複数のハッシュ関数で構成され、特定のデータが存在するかどうかを迅速に判断するために使用されます。ただし、HyperLogLog と同様に、これも少し不正確であり、一定の確率で誤判定が発生します。
-
キーを追加
複数のハッシュ関数を使用して、キーに対してハッシュ演算を実行して整数インデックス値を取得し、ビット配列の長さに対してモジュロ演算を実行して位置を取得します。
各ハッシュ関数は異なる位置を取得し、これらの位置を 1 に設定することで追加操作が完了します。
-
クエリ キー
いずれかがゼロであればキーが存在しないことを意味しますが、すべて 1 であれば対応するキーが存在するとは限りません。
**結論:** はい、可能です。絶対にありません。