MySqlに大量のURLを格納し、列にユニークなインデックスを作成したいとします。列をutf8にするとvarchar(333)に制限されますが、これは自分のURLの一部を保持するには不十分です。私がlatin1であると宣言した場合、私は1000文字全部を取得します(それほど必要とは思わない)。ただし、URLをエンコードして、常にエンコードされたURLを操作する必要があります。大量のURLを管理する良い方法はありますか?URLをMySQLに保存する最も効率的な方法は?
答えて
URLのホスト名とプロトコル部分を別々のテーブルに格納し、キーを使用して参照することが考えられます。これは後で、特定のホストのすべてのURLを取得し、文字列の長さに関する懸念を助けるためにも役立ちます。例えば
:これを行うには
PROTOCOLS
-----------------------
PROTOCOL_ID INTEGER
PROTOCOL VARCHAR(10) (i.e., http, https, ftp, etc.)
HOSTS
-----------------------
id BIGINT
hostname varchar(256)
URL
-----------------------
PROTOCOL INTEGER FK to PROTOCOLS
HOSTNAME BIGINT FK to HOSTS
QUERY_STRING VARCHAR(333)
私が知っている最も一般的なプラクティスは、衝突制御付きのハッシュアルゴリズムを使用しています。ちょっとしたクイック・ワンウェイ・エンコーディングを使用すると、URLの衝突が非常に少なくなります。
すべてのURL(つまりHTTP://、wwwなど)で同じ部分が細かくなるように切り取ってみてください。URLがすべてドメインの一部である場合は、それも切り捨ててください。
それ以外の場合は、問題を再検討し、達成しようとしていることを達成するための別の方法を試してみてください。私は、URLのユニークなセットが本当に他のいくつかの問題を解決していると仮定します。
なぜ彼がURLを保存しているのかについて間違った前提があるでしょう。 wwwなどを切り落とすのはおそらく/そうでない/安全です。 –
例を挙げてください。 httpとwwwを削除すると元のURLを簡単に再生成できますが、定義の整合性には影響しません...これを説明できますか? –
それは間違っています。 http://www.foo.comとhttp://foo.comが同じURLを参照する保証はありません。 https://www.foo.comとhttp://foo.comだけでは許さない。 –
3良い方法:
1)の代わりにVARCHARのテキストを使用します。一意性を保証するために、MD5()またはSHA1()ハッシュを格納し、UNIQUEまたはPRIMARYインデックスを追加するために別個のVARCHAR列を作成する必要があります。これはURLを取得する追加のディスクシークの不幸な結果をもたらしますが、ユースケースによってはOKかもしれません。
2)バイナリ照合でVARCHARを使用し、COMPRESS()を使用してURLを圧縮します。
3)最初の2文字を入力していたときに3番目の文字を忘れてしまった。 grr ...
- 1. ショッピングバッグのデータをmysql dbに保存する最も効率的な方法
- 2. iPhoneでディスクに写真を保存する最も効率的な方法は?
- 3. ユーザエージェント、紹介などを保存する最も効率的な方法は
- 4. アナリティクスビーコンを保存する最も効率的な方法は何ですか?
- 5. このデータを保存してトラバースする最も効率的な方法は?
- 6. iPhoneアプリの設定を保存する最も効率的な代替方法
- 7. 最も効率的な方法
- 8. 最も効率的な方法のハンドラ
- 9. MySQLでフルテキスト検索を行う最も効率的な方法
- 10. 一時的なユーザーデータを効率的に保存する方法
- 11. android.net.wifi.ScanResultをComparableにする最も効率的な方法は?
- 12. 動的アンケートを効率的に保存する方法は?
- 13. テキストボックスで数値のカンマを保持する最も効率的な方法は?
- 14. GCDでファイルをコピーする最も効率的な方法は?
- 15. データのハッシュをフォーマットする最も効率的な方法は?
- 16. アニメーションツールのためのデータ保存を最も効率的に/最も速く処理する方法
- 17. セマンティックグラフを効率的にビルドして保存する方法は?
- 18. jQueryリンクを作る最も効率的な方法は?
- 19. 最も効率的なマルチレベルコメントシステム
- 20. 最も効率的なバブルソートメカニズム
- 21. mysqlのIP範囲を照会する最も効率的な方法
- 22. xmlファイルの値を探す最も効率的な方法は?
- 23. 500.000の画像を保存する最も効率的な方法は何ですか?
- 24. asp.netでアイテムを保存/取得する最も効率的な方法は何ですかhttpContext.Cache
- 25. MySQL - 四半期の最後の日(最も効率的な方法)
- 26. BlackListを実装する最も効率的な方法
- 27. Eigen行列をループする最も効率的な方法
- 28. JSONをC#で解析する最も効率的な方法
- 29. ファイルを検索する最も効率的な方法
- 30. ラジアルプロファイルを計算する最も効率的な方法
クエリ文字列の中には、http://www.foo.com/index.jsp?a = 1&b = 2&c = 3 ..................... ..........................&z = uuuuggggghhhh –
合意。あなたは、テキストフィールドを使用するlongneckの提案のルートを行くことがあります。私は「URLの大規模なセットを管理するより良い方法はありますか?HOSTSテーブルにDOMAINテーブルに戻るdomain_keyを持つホスト名とドメインに分割することで、URLをどのように使用しているかに応じてやりたいことがあります。これにより、ドメイン内のすべてのURLを簡単に見つけることができます。 –
URLは非常に長くなる可能性があります - http://www.boutell.com/newfaq/misc/urllength.html – cjroth