2014-12-18 4 views
5

Dlaczego witryny takie jak YouTube, Imgur i większość innych używają losowych znaków jako identyfikatorów treści, a nie tylko numerów sekwencyjnych, takich jak te tworzone automatycznie przez MySQL?Dlaczego witryny wykorzystują losowe identyfikatory alfanumeryczne zamiast identyfikatorów baz danych do identyfikowania treści?

Aby wyjaśnić, co mam na myśli:

w adresie URL: https://www.youtube.com/watch?v=QMlXuT7gd1I

QMlXuT7gd1I na końcu wskazuje na konkretny film na tej stronie, ale jestem przy założeniu, że film ma także unikalny identyfikator liczbowy w baza danych. Dlaczego tworzą ten ciąg alfanumeryczny i używają go zamiast używać identyfikatora bazy danych wideo?

Tworzę witrynę, która identyfikuje treść w adresie URL, jak wyżej, ale obecnie używam tylko identyfikatora DB. Zastanawiam się nad przejściem do losowych ciągów znaków, ponieważ robią to wszystkie najważniejsze strony, ale chciałbym się dowiedzieć, dlaczego tak się dzieje, zanim go wdrożę.

Dzięki!

+1

Nie będziesz wiedzieć na pewno w przypadku YouTube. Jest prawdopodobne, że identyfikator alfanumeryczny jest zakodowaną wartością kombinacji różnych elementów meta-danych wideo. 'hash (ID, TIME, LENGTH)' –

+0

Umożliwia ich użycie jako tajnego klucza, umożliwiając [filmy niepubliczne] (https://support.google.com/youtube/answer/157177?hl=pl). –

Odpowiedz

6

Niektóre witryny robią to z powodu odłamków.

Gdy masz tylko jeden proces (jeden serwer), możesz utworzyć identyfikator automatycznego przyrostu bez duplikatów, ale jeśli masz wiele serwerów (z wieloma procesami), pisząc treść, np. Youtube, nie jest to możliwe użycie identyfikatora autoinkrementacji. Koszty synchronizacji w celu uniknięcia powielania byłyby ogromne.

Na przykład, jeśli czytasz mongodb's ocjectid documentation widać tę strukturę za ID: wartość 4-bajtowy reprezentujący sekund od początku epoki Uniksa, 3-bajtowy identyfikator maszyny, proces id 2 bajty, i licznik 3-bajtowy, rozpoczynający się od wartości losowej.

Na koniec jest to tylko 12 bajtów. Chodzi o to, że kiedy reprezentujesz w systemie szesnastkowym, wydaje się, że jest to 24 bajty, ale to tylko wtedy, gdy je wyświetlasz.

Inną zaletą tego systemu jest to, że znacznik czasu jest zawarty w id, więc można odłączyć identyfikator, aby uzyskać znacznik czasu.

+0

Dzięki. Ten i chrześcijański komentarz mają sens. – user3471040

5

Po pierwsze, nie jest to losowy ciąg znaków, jest to podstawowe obliczenie zależne od identyfikatora. Idą w ten sposób, ponieważ alfanumeryczna ma większą bazę

Coś 99999999 może być 1NJCHR

Spójrz here i bawić się z zasadami, i dowiedzieć się o nim więcej.

Zobaczysz, że jest o wiele krótszy. To jedyny powód, mogę sobie wyobrazić, że ktoś go w ten sposób, a to ma sens, jeśli masz identyfikatory jak 54389634589347534985348957863457438959734

As self i Cameron komentowane/odebrane istnieją szanse (especialy dla YouTube), że istnieją dodatkowe zabezpieczenie parametry takie jak czas i długość są w jakiś sposób obliczane, więc nie jesteś w stanie odgadnąć identyfikatora.

4

Oprócz powyższej odpowiedzi Christiana, zastosowanie obliczenia bazowego, wartości mieszanej lub innego nieliczbowego identyfikatora ma tę zaletę, że przesłania rozmiar bazy danych od konkurentów.

Nawet jeśli utrzymujesz numerację i ustawisz auto_increment na 50,000, wzrost o 50 itd., Wciąż można ustalić domysły na podstawie rozmiaru i wzrostu bazy danych. Opcje nieliczbowe nie eliminują tej możliwości, ale hamują ją w pewnym stopniu.

0

Istnieje duża szansa na złośliwe dane wejściowe od użytkowników końcowych, a także nie używanie identyfikatorów użytkowników, którzy nie mogą odgadnąć identyfikatora, a tym samym nie mogą odgadnąć, jak duża jest db. Jednak odpowiedzi innych na podstawie obliczeń podstawowych dobrze wyjaśniają.

Powiązane problemy