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. カスタム設定を保存する最も効率的な方法
- 3. mongodb gpsトラッキングデータを保存する最も効率的な方法
- 4. iPhoneでディスクに写真を保存する最も効率的な方法は?
- 5. Amazon DynamoDBにIPアドレスを保存する最も効率的な方法は?
- 6. ユーザエージェント、紹介などを保存する最も効率的な方法は
- 7. 最も効率的なページヒットを生成する最も効率的な方法
- 8. アナリティクスビーコンを保存する最も効率的な方法は何ですか?
- 9. このベクターを保存する最も効率的な方法は?
- 10. このデータを保存してトラバースする最も効率的な方法は?
- 11. 大量のデータをデータベースに保存する最も効率的な方法
- 12. mysqlにメールを保存する最も効率的な方法は何ですか
- 13. iPhoneアプリの設定を保存する最も効率的な代替方法
- 14. 財務データを保存する最も効率的な方法(Python)
- 15. アンドロイド開発でテキストとメディアを保存する最も効率的な方法
- 16. Java/Android - 多くの変数を保存する最も効率的な方法
- 17. データを保存して取り出す最も効率的な方法
- 18. MySQLでフルテキスト検索を行う最も効率的な方法
- 19. 最も効率的な方法
- 20. 最も効率的な方法
- 21. 最も効率的な方法と
- 22. 最も効率的な方法
- 23. 最も効率的な方法
- 24. 最も効率的な方法のハンドラ
- 25. 一時的なユーザーデータを効率的に保存する方法
- 26. android.net.wifi.ScanResultをComparableにする最も効率的な方法は?
- 27. 動的アンケートを効率的に保存する方法は?
- 28. テキストボックスで数値のカンマを保持する最も効率的な方法は?
- 29. Spark Streaming:foreachRDDデータをMySQLデータベースに効率的に保存する方法は?
- 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