実際のアルゴリズム(V):データ構造とアルゴリズムが学習短いURLシステムを達成するためにどのように?

実際のアルゴリズム(V):データ構造とアルゴリズムが学習短いURLシステムを達成するためにどのように?

我々はマイクロブログ内のURLと短いURLサービスの広告がある場合は、短いURL、オリジナルのURLにアクセスすることと等価である。このウェブサイトにちょうど短期訪問へのURLの内部にマイクロフェア、ではないが、同じ長さ、ジャンプすることができます

オリジナルURLます。https://github.com/wangzheng0822/ratelimiter4j
ショートURLます。http://t.cn/EtR9QEG

ショートURLサービス全体的なプレゼンテーション

ときに短いURLをユーザーがクリックすると、元のURLにブラウザをリダイレクト短いURLサービス短いURLサービスは、短いURLに元の長いURLのコア機能であり、ならびに

場合は、短いURLをユーザーがクリックするとき、元のURLにブラウザをリダイレクトショートURLサービス、どのように?ブラウザが最初のショートURLサービス、短いURLによるオリジナルURLへのアクセス、オリジナルURLによってページへのその後のアクセスを訪問します

ハッシュアルゴリズムによって、短いURLを生成するには?

ハッシュアルゴリズムは、ハッシュアルゴリズムの短いURLを使用して、固定長のハッシュ値に文字列を生成することができる時間の長さに関係なくすることができます

質問には短いURLを生成する逆パズルの難しさを心配する必要はありません、唯一の衝突確率計算速度とハッシュアルゴリズムを心配する必要があります

MurmurHashアルゴリズムは、2つのハッシュ値の長さを提供し、一方は32ビットであり、一つは、32ビットのハッシュ値を選択するため、最終的にはできるだけ短く発生する128ビット、短いURLであるhttps://github.com/wangzheng0822/ratelimiter4jMurmurHashアルゴリズム、生成されたハッシュ値の後に181 338 494、プラス、最終的な短いURLを生成するために、ドメイン名のショートURLサービスですhttp://t.cn/181338494(http://t.cn短いURLは、ドメイン名サービスです)

図1は、どのように短いURLを短くするには?

ハッシュ値法のアイデンティティ、あなたは簡単に短くなることができ、短いURLを変更する必要があり、10進数のハッシュ値が高いバイナリハッシュ値に変換することができ、そのハッシュ値が短くなっています。10進数のハッシュ値が高い進ハッシュ値が短いハッシュ値に変換することができ、進は、AE 10-15、URL内のURLによって表される、法的な文字があります0- 9、AZ、AZ、62文字、10進ハッシュ値に変換することができる62バイナリ、短いURLが表される62進http://t.cn/cgSqq

(181338494)10 62 =(cgSqq)

62分の181338494 I番号= 26(Q)

62分の2924814 I番号= 26(Q)

62分の47174 I数= 54(S)

62分の760 I番号= 16(G)

62分の12 = 12©余り

ハッシュ衝突の問題を解決する方法を2?

一つの問題ハッシュアルゴリズムハッシュ衝突は避けられません

短いURLにアクセスする際に、このような独自のデザインや既存のデータベースの使用のストレージシステムとして、この対応を格納するための多くの方法が、ありますが、元のURLに後続のユーザーは、対応関係に基づいて検索できるように、元のURLを短いURLとの対応を保存し、 MySQL、Redisの、MySQLデータベース内のオリジナルURL短いURLとの関係を記憶する仮説対応

同じ短いURLが見つからない場合は、短いURLを生成するMurmurHashアルゴリズムを使用している場合、短いURLを生成し、この短いURL新世代を取るために、MySQLデータベースに見て新しいオリジナルURLの必要性がある場合、そのこの短いURL新世代を示しますそこには、競合は、ユーザーに返さ、ではない、その後、URLの短いMySQLデータベースに、元のURLとの対応を格納します。あなたは同じ短いURLを見つけた場合は、必ずしも意味するものではありませ紛争を行い、など直接この短いURLを取り、そうでない場合は同じ、場合短いURLデータベースから対応する元のURLは、取り出すことになる、明Haxiアルゴリズムが発生しました紛争、この時間は、「[重複しては]」、そして再計算したハッシュ値の確率、ハッシュ計算は二回、競合しているが、非常に極端な例があったと仮定して、高くないよう、特殊文字の元のURL文字列に接合することができます等、及び衝突、バック文字列をステッチ、「[OHMYGOD]」、およびその後のハッシュ値を計算し、元のURLのテキストを算出したハッシュ値一緒に特別な文字列を縫合した後のMySQLに格納されていますデータベース

ユーザーは、短いURLにアクセスすると、短いURLサービスは、まず、特殊文字を削除し、そして、元のURLが特殊なステッチフィールドを持っている場合には、(文字列照合アルゴリズムを経由しています)、元のURLに対応するデータベース内の短いURLに目を通します元のURLは、ブラウザに特殊文字が含まれていません

短いURLのパフォーマンスを生成するハッシュアルゴリズムを最適化する方法を3?

短いURLの競合を生成するかどうかを決定するために、必要性は非常に遅い、データベースで生成された短いURLを取得するために見て

添加されるB +ツリーインデックスを短いURLフィールドを与えることができ、又は2つのSQL文を実行する短いURL作成処理であってもよく、SQL文が最初にオリジナルURLの短い間の関係に対応する短いURLクエリURL、第二のSQLステートメントを通過さ二つの別々のサーバまたは仮想サーバに(ビジネスロジック計算が格納されたデータだけでなく)元のURLデータベースと、通常の状況下では、アプリケーションとデータサービスに新たに生成された短いURLとの対応関係に格納されて展開されます、ネットワーク通信に二回2つのSQL文を実行すると、このような通信IO SQL文を実行する必要が全体のショートURLサービスのパフォーマンスのボトルネックである、パフォーマンスを向上させるためには、データベース内の短いURLフィールドにSQL文を低減する必要があります対応する直接生成元のURL短いURLがデータベースに保存されている試みることときに、新しい、元のURLの必要性は、短いURLを生成する際に一意のインデックスを追加し、(だけでなく、指数はなく、テーブルに重複するデータを持つことはできません必要です)あなたは、データベースの違反のフィードバック場合は、新しく生成された短いURLが競合しないことを示す、通常の状態にデータを書き込むことができる場合 アンチ一意のインデックスの異常、再実行して「クエリ - 書き込みプロセス」、SQL文の実行回数抗成長が、ほとんどの場合には、新たな短いURLの生成やデータベースに元のURLに対応するには、合計で、紛争には表示されませんSQLステートメントが大幅に実行回数を減らします

短いURLの取得ブルームフィルタで見ての新世代は、結果がある場合ときにも、新たな短いURLが生成されると、短いURLがブルームフィルタを構築するために生成されたブルームフィルタを使用することができますそれは何の矛盾が、その後、元のページに短いURLと対応する書き込みSQL文を実行しないことを示す、存在しません。

短いURLを生成するための自動インクリメントIDジェネレータを使用するには?

短変換元のURL要求にフェッチID番号ジェネレータを起動、短いURLがある場合、自己IDジェネレータ過形成を維持し、1,2,3 ......整数IDは、そのような増加を生成することができる、サービスのアドレスは、受信されました、次に表記62に変換され、バックドメインに、最終的な短いURLを形成し、短いURLサービス(http://t.cn/)スプライスされ、最終的に元のURLに対応する生成された短いURLとデータベースに格納されています

1と同じ元のURLが異なる短いURLに対応することができます

新世代の新しい短いURLへの各元のURLは、どのように対処する、さまざまな短いURLを生成するために、同じ元URLの2があるかもしれませんか?第一存在する場合、対応するショートを削除、元のURLの取得がデータベースにすでに存在するかどうかを見て、時間の短いURLを生成するために、元のURLを短いURLを生成するためにハッシュアルゴリズムによって第2の処理されませんURLは、直接データベースに短いURLとインデックスが作成され、元のURLと、元のURLによってクエリをスピードアップするために、元のURLプラスインデックスに対応するユーザの問い合わせ短いURLを向上させるために、インデックスの元のURLの速度と組み合わせる短いURLを与えるために、ユーザが、必要に返します短いURLスピード

2どのように高性能なIDジェネレータを達成するには?

そこなフィールドからデータベースの使用の増加などのIDジェネレータを達成するための多くの方法が、ある、またはカウンタ+ 1 + 1を維持するために、頻繁な短いURL生成要求に対処するためのカウンタをロックする必要があり、より多くの困難、どのIDジェネレータを向上させるためにパフォーマンス?我々は、事前に選択された数は、アクセス番号に送信される短いURLを生成するための要求を受信したときにID発生器は、予め-FA、各番号のID番号が発行される前に送信のバッチを複数搭載します複数の番号によって行われたプレフィルター、同時毛の数を増加させる能力

第二は、同時に、例えば、発電機によって生成されるが、一定の規則に従って、各IDジェネレータを必要と繰り返されないことを確実にするために、ID番号が生成され、第一世代のIDを各IDのIDをサービスIDの複数を達成直接生成であります唯一の尾番号0を生成することができ、唯一同時にIDジェネレータ、効率複数のを通して、第二尾数...... 1を生成することができます

要約:

ショートURLサービスを実現するために2つの方法:

第MurmurHashアルゴリズムを用いてハッシュアルゴリズム短いURLで生成され、算出進数62がバイナリ表記に変換され、第二のIDジェネレータ短いによって生成されたURLであり、自己IDを維持ID生成器によって、URLは、元のID番号のそれぞれに割り当てられ、62表記に移し、次いで、短いURLドメインをスプライシング、短いURLを形成します

公開された74元の記事 ウォンの賞賛9 ビュー9149

おすすめ

転載: blog.csdn.net/ywangjiyl/article/details/104902488