メソッドとデータ構造パート - ハッシュアルゴリズム(ハッシュ)

メソッドとデータ構造パート - ハッシュアルゴリズム(ハッシュ)

定義と原則ハッシュアルゴリズムは、基本的に単語をまとめることができ、非常に簡単です。バイナリ値は、固定長のバイナリ文字列に任意の長さの文字列をマッピングし、マッピングルールは、ハッシュアルゴリズム、および値のバイナリ文字列をマッピングすることによって、元のデータが取得された後にハッシュ値を

ハッシュアルゴリズムの条件を構成します:

  • 我々は(また、ハッシュアルゴリズムので、一方向ハッシング・アルゴリズムと呼ばれる)は、元のデータから導出されたハッシュ値を元に戻すことはできません

  • ビットが変更のみ生データは、結果のハッシュ値が非常に異なる場合でも、入力データに対して非常に敏感。

  • ハッシュ衝突の確率が異なる生データのために、同じハッシュ値の確率が非常に小さく、非常に小さいことを特徴とします。

  • ハッシュアルゴリズムの効率は急速にハッシュ値を計算することができ、長いテキストの可能な限り効率的のように。

ハッシュアルゴリズムの適用(パートI)

セキュリティ暗号化

それは、ハッシュアルゴリズムを適用することになると、最初に考えたのはセキュリティ暗号化する必要があります。最も一般的に使用される暗号化ハッシュアルゴリズムであるMD5(メッセージダイジェストMD5 Mathimatics-数値アルゴリズム、メッセージダイジェストアルゴリズムMD5)およびSHA(セキュアハッシュMathimatics-数値アルゴリズム、セキュアハッシュアルゴリズム)。

よりこれら二つに加えて、当然のことながら、このようDES(データ暗号化規格、データ暗号化規格)、AES(高度暗号化規格、高度暗号化規格)など、他の多くの暗号化アルゴリズムは、あります。

私は、特に重要な二つがありますが、以前のハッシュアルゴリズム4点の需要、暗号化のためのハッシュアルゴリズムを述べました。最初のポイントは、ハッシュ値を導出するために元のデータを反転することは困難であり、第二の点は、ハッシュ衝突の確率が小さいことです。

しかし、しかし、理由はハッシュ値の衝突確率の広い範囲のハッシュアルゴリズムハッシュ衝突が非常に低い場合であっても場合があり、まだ割れするのは比較的困難です。以下のようなMD5は、2 ^ 128の異なるハッシュ値が存在し、このデータは天文学的図形を有しているので、ハッシュの衝突の確率が1/2未満^ 128です。

我々はMD5ハッシュ値を取得する場合は、徹底的な方法は、他のデータの同じMD5値を見つけるための法律ではありません、それは時間のかかる天文学的でなければなりません期待しています。だから、そこに競合ハッシュアルゴリズムであるが、限られた時間とリソース、またはハッシュアルゴリズムを破ることは非常に困難である場合でも。

補足暗号知識ポイントの場合、MD5このアルゴリズムは確かに安全ですが、ネットワークはまた、虹のテーブルはMD5のために表示されている、最も一般的なアイデアは、パスワードの後ろにセットを追加することである塩のコード(塩)、例えば、使用することができmd5(1234567.'2019@STARK-%$#&-idje-789')2019@STARK-%$#&-idje-789塩コードとして保護とセキュリティに一定の役割を果たしました。

一意識別子(UUID)

私たちは、各ピクチャに一意の識別子を取ることができ、またはメッセージダイジェスト。例えば、我々は100バイトのバイナリ文字列の先頭から写真を撮ることができ、100のバイトが途中から取られ、そして最終的にはハッシュで300に100その後、バイト、これらのバイトから取りました(例えば、MD5)、一意に識別するピクチャとして使用ハッシュ文字列を取得します。ワークロードの多くを減らすことができるように、ギャラリー内の画像かどうかを判断するには、この固有の識別を通じて。

あなたは、効率を向上させるために継続したい場合は、我々は独自に各画像を識別することができ、そしてギャラリーで対応する画像ファイルのパス情報は、ハッシュテーブルに格納されています。あなたはギャラリーで画像を表示したい場合は、時間ではない、聞かせてのは、ハッシュアルゴリズムを通じて、この画像の固有の識別を取り、その後、ハッシュテーブルにこの一意の識別子の存在を探します。

そうでない場合には、この画像がギャラリーにないことを示している。があれば、私たちは、その後のように、今あなたが比較の全体量は、完全にかどうかを確認するために行う画像を挿入したい、既存の画像へのアクセスを、ファイル・パスハッシュテーブルのストレージを渡します同じ。同じ2枚の画像が固有の識別を示しているが、同じでない場合ではなく、同じ絵、それが既に存在していることを示しているように、もし。

データ検証

原理はBTダウンロードP2Pプロトコルをベースにしています。2GBのダウンロードムービー、ムービーファイルから複数のマシン上の私たちのパラレルは、(100個のブロック、20メガバイト程度ごとに分けることができるよう)ファイルブロックの多くに分けることができます。など、すべてのファイルブロックの後にダウンロードされ、その後、ライン上の完全なムービーファイルに組み立て。nginxの上でおそらく意味スライシング技術を持っています。

ファイルブロックにハッシュアルゴリズムを我々は100ハッシュ値を取り、そしてシードファイルに格納されていました。私たちは、ハッシュアルゴリズムはデータに非常に敏感である機能を持っている、以前に述べました。限りファイルブロックの内容は、わずかな変更を持っているように、最後に計算されたハッシュ値が完全に異なるものになります。だから、ときブロックファイルのダウンロードが完了すると、我々は同じハッシュアルゴリズムを通じてダウンロードしたファイルブロックの1つのハッシュ値ずつを見つけ、その後、シードのハッシュ値を比較して、ファイルを保存することができます。改ざんまたは不完全である、他のホストマシンのブロックから再ダウンロードファイルに必要されている異なる場合は、ファイルブロック。

ハッシュ関数

アプリケーションのフロントにいえば、実際には、ハッシュ関数は、アプリケーションのハッシュアルゴリズムである、非常にDuoha Xiのアルゴリズムです。

我々は最初の二つの話、ハッシュ関数は、ハッシュテーブルを設計するための鍵です。これは、直接パフォーマンスとハッシュテーブルのハッシュの衝突の確率を決定します。しかし、他のアプリケーションでは、ハッシュ関数は、相対的にはるかに低いアルゴリズムの競合をされるハッシュにハッシュアルゴリズムが必要です。でも、個々のハッシュ衝突は限りあまりにも深刻ではないとして、我々はオープンアドレス指定方法やリストの方法で解決することができ、発生します。

だけでなく、逆の復号化が懸念されていないかどうか、得られた値を計算するハッシュアルゴリズムのハッシュ関数、その。ハッシュアルゴリズム、ハッシュ関数を使用し、多くの注目は、ハッシュ値が均等に各溝均一ハッシュのデータのセットかどうか、すなわち、分散させることができるです。また、ハッシュ関数の実行速度は、また、そうアルゴリズム使用されるハッシュ関数は、一般的に効率の比較的追求比較的単純でハッシング、ハッシュテーブルの性能に影響を与えます。

ハッシュアルゴリズムの適用(パートII)

ロードバランシング

私たちは、このようなように、ポーリング、ランダム、加重ポーリングやなどのアルゴリズムを、ロードバランシングがたくさんあることを知っています。どのように我々は、スティッキーセッション(セッションスティッキー)アルゴリズムが行う負荷分散を実現することができますか?言い換えれば、我々はすべて1つのセッションで要求が同じサーバーにルーティングされ、同じクライアント上に必要です。

最も直接的な方法は、マッピングテーブルを維持することで、この表の内容は、サーバ数とクライアントIPアドレスまたはセッションIDマッピングです。クライアントから送信された各要求は、あなたは、マッピングテーブル内のサーバーにルーティングするための番号を見つける必要があり、その後、サーバーに対応する番号を要求します。この方法はシンプルで直感的ですが、いくつかの欠点があります。

  • クライアントの多くのマッピングテーブルは、メモリ空間の無駄が非常に大きくなることができれば。

  • オンラインクライアントのオフライン、サーバーの拡張メンテナンス費用が膨大になるように、体積の減少は、マッピングの失敗、マッピングテーブルになります。

ハッシュアルゴリズムを使用する場合は、これらの問題を完全に解決することができます。私たちは、アルゴリズム、クライアントのセッションIDやハッシュ値の計算終了のIPアドレスをハッシュすることができ、ハッシュ値のサイズと剰余演算取得サーバのリストが行われ、最終的な値は、サーバ番号にルーティングされるべき得られます。このように、我々は同じバックエンドサーバにルーティングされているのと同じIP上のすべての要求を置くことができます。

データ片

表示される「キーワード検索」の数をカウントする方法1.?

私たちは、このキーワード検索、我々はすぐに各キーワードが検索された回数をカウントしたいのユーザーを記録1Tログファイルを、持っている場合、どのようにそれを行うには?

さんは分析してみましょう。この質問は、最初のものは偉大な検索ログ、マシンのメモリを配置する方法はありませんで、2つの困難を持っています。唯一の非常に長い時間でこのような巨大なデータ処理機械に対処する場合は、2番目の難しさは、あります。

我々は最初のデータ断片、その後、複数のマシンを処理する方法ができ、処理速度を向上させます。具体的なアイデアは、これである:処理速度を高めるために、我々は、N個の並列計算機で処理しました。私たちは、機械番号に割り当てる必要がありますされ、その後、モジュロnは、最終的に得られた値を話し、順次各検索キーワードを読み込み、ハッシュ関数によるハッシュ値を計算し、ログファイルから履歴を検索します。

このように、同じハッシュ値が同じマシン上でのキーワード検索に割り当てられています。言い換えれば、同じ検索キーワードが同じマシンに割り当てられます。キーワードは、各マシンに表示された回数を計算し、最終的には一緒にマージされます最終的な結果です。

ギャラリーの写真かどうかを判断する方法は迅速2.?

どのようにすばやく決定ギャラリー内の画像かどうか?私たちは、あなたが覚えているかどうかを知りませんが、例にこのについて話しましたか?私は、各ピクチャのための固有の識別(又はメッセージダイジェスト)を取り、その後、ハッシュテーブルを構築する方法を導入しました。

動作しない単一マシン上でハッシュテーブルを構築するために、私たちの図書館は明らかに、億枚の写真を持っていることになりましたとします。限られているため、単一のマシンのメモリ、および億枚の画像のハッシュテーブルがはるかに単一のマシンのメモリの上限よりも明らかに構築することができます。

我々はまた、データ、およびマルチプロセッシングマシンを断片化することができます。我々は、画像に対応するハッシュテーブルを維持することのみが特定の部分に、Nマシンに各マシンを用意しています。我々は、画像ライブラリ、ユニークな識別計算及び剰余モジュロから読み出さNマシンの数と、それが割り当てられる機体番号によって得られた値に対応するたびに、この画像と固有の識別は、画像パスに対応する送信しました機械ハッシュテーブルを構築します。

我々は、画像ギャラリーにあるときを決定する必要がある場合、我々は一意に計算画像、マシンの数に次いで残りモジュロnを識別するために、同じハッシュアルゴリズムを採用しました。値の仮説をk、その後、マシンの建物の中に数kハッシュテーブルの検索に進みます。

各データ・ユニットのハッシュテーブルは、2つのパス情報、ハッシュ値、および画像ファイルを含みます。我々はMD5ハッシュ値を計算し、長さが128ビット、すなわち16バイトであると仮定する。最大ファイル・パスの長さが256バイトで、我々は平均の長さが128バイトであると仮定することができます。我々は競合を解決するために、リストのメソッドを使用する場合は、ポインタを格納することも必要で、ポインタが8バイトだけを占めます。したがって、各データユニットに対してハッシュ・テーブルは、152バイト(これは、正確な目安ではない)を占めます。

ハッシュテーブル構築百万約10(2GB * 0.75 / 152)の画像であるため、機械2ギガバイトのマシンのメモリサイズ、0.75のハッシュテーブルの負荷率を仮定する。あなたが億枚の画像のインデックスを構築したいのであれば、それは十機ほどかかります。エンジニアリングでは、この推定値はまだ非常に重要であり、それは私たちが資金を投入する資源の必要性を推進することを可能にする優れたソリューションの実現可能性を評価するために、一般的な理解を持っています。

実際には、大量のデータについては、この契約の問題は、我々は複数のマシンに分散処理を使用することができます。断片化のこの考えでは、スタンドアロンのメモリ、CPUおよびその他のリソースを抜け出すことがあります。

分散ストレージ

一貫性のハッシュアルゴリズムデビュー

我々は、2つのマシンKがあると、データ範囲のハッシュ値は[0、MAX]です。我々全体の範囲は、(mはkよりはるかに大きい)mは、各マシンはm / k個の部分区間を担当して小さなセクションに分割されています。参加する新しいマシンがあるとき、私たちは新しいマシンに元のマシンから移動し、いくつかの細胞間のデータの特定になります。したがって、どちらのすべての再ハッシュ、データの移動、データは平衡の各マシンの数に維持されます。

发布了98 篇原创文章 · 获赞 185 · 访问量 9万+

おすすめ

転載: blog.csdn.net/xuezhiwu001/article/details/104061362