Chcę przechowywać duży zestaw adresów URL w MySql i utworzyć unikalny indeks w kolumnie. Jeśli utworzę kolumnę utf8, będę ograniczony do varcharu (333), który nie wystarczy do przechowywania niektórych moich adresów URL. Jeśli zadeklaruję kolumnę jako latin1, otrzymam pełne 1000 znaków (nie sądzę, że potrzebuję tak dużo). Muszę jednak zakodować adres URL i mieć pewność, że zawsze pracuje z zakodowanym adresem URL. Czy istnieje lepszy sposób na zarządzanie dużymi zestawami adresów URL?Najbardziej skuteczny sposób przechowywania adresów URL w Mysql?
Odpowiedz
Jedną z rzeczy, o których możesz pomyśleć, jest przechowywanie nazwy hosta i części protokołu adresu URL w oddzielnej tabeli i odnoszenie go za pomocą klucza. Może to również później okazać się przydatne przy uzyskiwaniu wszystkich adresów URL dla określonego hosta, a także w rozwiązywaniu problemów związanych z długością łańcucha.
Na przykład:
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)
Najczęściej stosowaną praktyką jest używanie algorytmu mieszania z kontrolą kolizji, wystarczy użyć pewnego rodzaju szybkiego kodowania jednokierunkowego, które spowoduje bardzo małe kolizje w adresach URL.
Spróbuj odciąć części, o których wiesz, że będą takie same dla wszystkich adresów URL (tj. HTTP: //, www, itd.) JEŚLI adresy URL są częścią Twojej domeny, odetnij to również.
W przeciwnym razie ponownie przeanalizuję problem i spróbuję znaleźć inny sposób osiągnięcia tego, co chce się osiągnąć. Zakładam, że posiadanie unikalnego zestawu adresów URL naprawdę rozwiązuje jakiś inny problem.
Tworzysz prawdopodobnie błędne założenia o tym, dlaczego przechowuje adresy URL. Prawdopodobnie/nie/bezpiecznie jest odciąć www, itp. –
Czy możesz podać przykład? Po usunięciu http i www możesz łatwo odtworzyć pierwotny URL, nie wpływa to na integralność definicji ... Czy możesz to wyjaśnić? –
To źle. Nie ma gwarancji, że http://www.foo.com i http://foo.com odnoszą się do tego samego adresu URL. Nie mówiąc już o https://www.foo.com i http://foo.com. –
trzy dobre sposoby, aby to zrobić:
1) stosowanie tekstu zamiast VARCHAR. aby zapewnić wyjątkowość, musisz również utworzyć oddzielną kolumnę VARCHAR, aby przechowywać skrót MD5() lub SHA1() i dodać indeks UNIQUE lub PRIMARY. ma to niefortunną konsekwencję, że dodatkowy dysk próbuje odzyskać URL, ale w zależności od twojego przypadku użycia, który może być OK.
2) użyj VARCHAR z układaniem binarnym i skompresuj URL za pomocą COMPRESS().
3) Zapomniałem trzeciego, gdy pisałem pierwsze dwa. grr ...
+1, osobiście wybrałabym numer 1 (umieszczając unikalne ograniczenie na haśle adresu URL, a nie na URL samo). – nathan
Czy powinienem utworzyć kolejną kolumnę dla skrótu, zamiast ustawić kolumnę URL VARCHAR jako podstawową? – User
Zrobiłem dwie oddzielne sugestie. Nie powiedziałem, że jeden był lepszy od drugiego. Musisz wybrać, który jest najbardziej odpowiedni dla twojego przypadku użycia. – longneck
- 1. Najbardziej skuteczny sposób na znalezienie najbliższej liczby całkowitej w MySQL?
- 2. Najbardziej skuteczny sposób zliczania wystąpień?
- 3. Najbardziej skuteczny sposób tworzenia dziennika aktywności
- 4. najbardziej skuteczny sposób debugowania na urządzeniu Blackberry?
- 5. Najbardziej skuteczny sposób modyfikacji zawartości CMSampleBuffer
- 6. Python: najbardziej skuteczny sposób przekonwertować datę datetime
- 7. Najbardziej skuteczny sposób rysowania wielu identycznych obiektów?
- 8. Najbardziej skuteczny sposób konwersji InputStream na bajt []?
- 9. Najbardziej skuteczny sposób zapisu pliku do ServletOutputStream
- 10. Najbardziej skuteczny sposób na uzyskanie kilku skrótów w Redis?
- 11. Jaki jest najbardziej skuteczny sposób wyszukiwania zagnieżdżonych list w python?
- 12. Najbardziej skuteczny sposób obliczania odległości Hamminga w Ruby?
- 13. Najbardziej skuteczny sposób tworzenia CALayer z obrazem w nim?
- 14. Najbardziej skuteczny sposób na znalezienie następnego elementu w kodzie korygującym
- 15. Serwer SQL: Najbardziej optymalny sposób przechowywania czasu (bez daty).
- 16. Jaki jest najbardziej skuteczny sposób wykrywania skrzyżowań trójkąt-trójkąt?
- 17. Jaki jest najbardziej skuteczny sposób dodawania odbicia do UIImageView
- 18. Java - Jaki jest najbardziej skuteczny sposób synchronizowania ArrayList?
- 19. Najbardziej skuteczny sposób aktualizacji za pomocą LINQ do SQL
- 20. Najbardziej skuteczny sposób ustawiania stylu za pomocą czystego javascript?
- 21. Najbardziej skuteczny sposób na wybranie elementu kończącego tablicę?
- 22. Najbardziej skuteczny sposób tworzenia połączonej listy z przechowywanych danych?
- 23. Jaki jest najbardziej skuteczny sposób tworzenia dodatkowych wątków z wątku?
- 24. Najbardziej pythonic (i skuteczny) sposób gniazdowania listę parami
- 25. Jawa, najbardziej skuteczny sposób przekazać tablicę ciągów jako parametru Metoda
- 26. Najbardziej skuteczny sposób na usunięcie wszystkich zduplikowanych wierszy z tabeli?
- 27. Najlepszy sposób na porównanie 2 adresów URL
- 28. MySQL najlepszy sposób przechowywania długich łańcuchów
- 29. Rozmiar do przechowywania adresów IPv4, IPv6 w postaci ciągu znaków
- 30. przechowywania danych JSON w mysql
Niektóre ciągi zapytań mogą być długie: http: //www.foo.com/index.jsp? A = 1 & b = 2 & c = 3 ..................... .......................... & z = uuuuggggghhhh –
Uzgodnione. Możesz chcieć pójść drogą sugestii longneck'a o użyciu pola tekstowego. Bardziej przychodzi mi do głowy "Czy istnieje lepszy sposób na zarządzanie dużymi zestawami URL-i", co wpływa również na długość adresów URL.Jedną z rzeczy, którą możesz chcieć zrobić, w zależności od tego, w jaki sposób twoje adresy URL dzielą nazwę hosta na hosta i domenę, a tabela HOSTS ma klucz domeny z powrotem do tabeli DOMAIN. Może to sprawić, że znalezienie wszystkich adresów URL w domenie będzie banalne. –
Adresy URL mogą być bardzo długie - http://www.boutell.com/newfaq/misc/urllength.html – cjroth