ショートリンクアルゴリズム原理

私たちは、インターネットにアクセスする際に通常、最も印象的な1時間が短いリンクサービスです。たとえば:通常のWebページの表示のマイクロチャネル点で、我々は選択した場合、ブラウザが開いたとき、あなたは非常に長いURLが表示されます、我々は時間を共有し、あなたはこの中で言及された短いURLを、表示されます短いリンクのアプリケーションの一つ。
ロングリンク例:httpsの:? //Mp.weixin.qq.com/s __biz = MzAxNzMwOTQ0NA ==&ミッド= 2653355437&IDX = 1&SN = 5901826ea638462ff71b7f2d06c6331d&chksm = 8035d7c6b7425ed06661866af60657414bb71765d2ce915d14726736fa1e72ea8a529331c947&シーン= 0&キー= 34df968fd24033237ff036c7de8b6745e1968de9564cf2a8db689025dd0c3682848381771dab960824f506e6f9d484614746f9c0eecb48b884ce4320bb86470a77ce811cc5b401a8800b6fd6b36be097&ascene = 0&UIN = ODU5NDQ1NjI1&DEVICETYPE = iMacの+ MacBookAir6%2C2 + OSX + OSX + 10.12.6 +ビルド(16G29)&バージョン= 12020810&NETTYPE = WIFI&fontScale = 100&pass_ticket = IvPqxUmCJqZg9%2B3GfAIQSbQ4IGRIHx796D0UwlCyUCu4b5P4bSsjlN89A0eRzSfL
私は短いリンクシステムを(長期の有効期限が切れる)を生成します。https://0x9.me/FAKcm

短いリンクそれに長いリンクを変換する方法?

さらに騒ぎがなければ、我々は非常に短い短いリンクがリンクされています。私たちの目的は、短いリンクに長いリンクを変換することです。短いリンクにそれを長いリンクを変換する方法:次に、私が質問をしたいですか?
1.圧縮は
、長いアドレスに短いアドレスを変換するためのアルゴリズムを実装します。その後、元のアドレスにショートアドレスを変換する、逆の動作を実現します。実際には、慎重にこれは不可能であり、考えます。
2.Hashアルゴリズムは、
ほとんどの人が考えるような方法かもしれません。誰かが、提案させていただきます長いURLのハッシュ演算、一意の長いリンクとしてこれを識別し、その後、ハッシュ値になります。しかし、一般的に簡単に、それは必ずしも最善ではないと思うのために、我々は衝突ハッシュを生成することが可能であることを知って、ハッシュ衝突解決策は、短リンクシステムの複雑さを向上させます。

最適なアルゴリズム

Faをの原則により、

名前は、最初の要求が来たこのシステムは、我々は、例えば、我々は短いリンクシステムがt.cn/0、二t.cn/1などとなって与えることができます最初の要求をマイクロブロギングれるとおり、
実装方法は非常に簡単になります
自動インクリメントインデックスMySQLでコンパクトなシステムが十分である、1。
図2に示すように、大規模なシステムは、分散キー値システムと考えることができます。

ストレージの原則

FA戦略は、ときに、新しいリンク上で、Faは対応する番号を発行している、というものです。戻ってくる新しいリンクは、保持たびFaをFaがだけで結構です。短いxx.xxx/0は、例えば、最初の着信リンクFaをFaがリンクに対応する、0であり、第二の着信リンクFaがxx.xxx/ショートリンクに対応し、Faを1番です1、そして上のようにします。
進数Faが大きく文字列に変換された番号の長さを低減することができる、変換するバンド62の必要性を出射されました。このようなリンクxx.xxx/10000000000を得るために、直接スプライシングドメインの後ろに16進数62に変換されない場合、例えばFaが、10,000,000,000この数を出射されました。上記62進数に変換し、結果はAOYKUa、わずか6の長さは、xx.xxx/AOYKUaへのリンクが追加されます。見ることができ、変換後の短いリンク長のバンドが少し短くなります。番号空間626に対応する6進数62は、したがって、基本的にFaは全く番号が発行されないことができるある場合について心配しないで、568億にほぼ等しいです。

高い同時実行のシナリオ

上記の設計は、番号が発行されている単一のポイントを、持っているように見えます。あなたは、分散、マルチノードを作成する場合は、同期、多地点同時書き込みを維持するために1を追加します。したがって、パフォーマンスのボトルネックのシングルポイントを回避することは困難です。したがって、我々は、マルチポイントに単一の点を考慮することができます。我々は、唯一100N 0モジュロ100に等しく送信するだけマシンBに送信共感100の番号100N + 1つのモジュロに等しく、そしてように、我々は、機械Aの数を設定することができ、機械の各機械の複数を導入することができますお互いを乱すことなく、互いに独立して、我々はいつでも私たちのマシンを拡張することができます。

同じ長さのリンクは、各リンクは、同じショートに変換されます

ヒットしない場合は、クエリキャッシュ場合、Faがリンクに新しい番号をお送りしますので、同じ長さのリンクは、各リンクは、必ずしも、短い、などに入りません。キャッシュは、リンクがアクティブな場合1時間のセットのキャッシュの有効期限は、クエリキャッシュヒットは、キャッシュは、これをリンク、リタイミングの生存期間を更新することを提供し、人気のリンクを頻繁にキャッシュされた変換されなければならないことに留意すべきですリンクは、キャッシュの長期的な存在となります。
また、LRUアルゴリズムを導入することができます。私たちは、多くの場合、リンクを使用するために排除することはありません。

リダイレクション

301、または302を選択しますか?
301は、302リダイレクトが一時的なもので、永久的なリダイレクトです。

あなたは301を選択した場合:短いアドレス生成は変更されませんした後、それは301のHTTPのセマンティクスに沿ったものです。また、サーバーを軽減するためにいくつかの圧力があるでしょう。その結果、我々は短いアドレスをクリックした回数をカウントすることはできません。
あなたは302を選択した場合:。それは、サーバー上の圧力が増加しますが、あなたは短いアドレスをクリックした回数をカウントすることができ、私はクリックすると、機械学習、および推薦アルゴリズムを処理するビッグデータのために遅刻することができますが、302を選択します
302または301を選択し、おそらく読者の心のいくつかは確かに存在します。

他の

以下は、いくつかのアルゴリズムの概要を見つけるためにインターネットからである
ためのアルゴリズムを:

最も明白な可能性は、使用する暗号化アルゴリズムMD5クラスにあり、その後、暗号化された文字列のために処理しました。

1)URL文字列MD5は4つのセグメントに分割され、32ビットの署名を生成するの長さ、各8つのバイト;
2)これら四つのループ処理、進文字列として8つのバイトを取り、彼は0x3FFFFFFFを( 30 1)および操作、即ち、30の以上の無視を処理するステップと、
順次6を得るために実行される特定のアルファベットの文字列を取得する指標として6つのセグメント、各5桁の数に分割されている3)30;
4)合計MD5ストリングは、4個の6ビットのビット列を取得してもよい、短い長さのURLをURLアドレスの内部として任意に取ることができます。

2つのアルゴリズム:
A-ZA-Z0-9それは、6、64ビットの組み合わせを取り、注文5億個の組み合わせを生成することができます。数字や文字が62個の組み合わせがaaaaa9あるなど、第一の組成物63はaaaaba、再利用シャッフルアルゴリズムは、マッピングのいくつかの組み合わせは、我々は固有の文字列を生成することができません、元の文字列のストレージは、対応する、破砕しました文字列の組み合わせ位置が無秩序の組み合わせになります。
返されたIDを取ってデータベースに格納されたURLの長さは、例えば、ID 1を返し、対応する文字列を検索し、対応する文字列がBBB上記の組み合わせである、共感IDは、文字列の組み合わせBBA 2であり、そしてようにそれが表示された後、それが到達するまで、64個の組み合わせを繰り返すことができます

公開された158元の記事 ウォンの賞賛119 ビュー810 000 +

おすすめ

転載: blog.csdn.net/u013474436/article/details/104764524