22:01
3/12/2014

Ciekawostka. Jak informuje YouTube, nigdy nie przypuszczali, że ktoś może obejrzeć jakieś wideo więcej niż 2,147,483,647 razy (32-bit integer). Ale hit PSY, “Gangnam Style” przekręcił licznik. I dlatego Youtube wykonało upgrade do 64-bit integer (9,223,372,036,854,775,808). Challenge accepted?

Przeczytaj także:

Ten wpis pochodzi z naszego linkbloga *ptr, dlatego nie widać go na głównej.
*ptr możesz czytać przez RSS albo przez sidebar po prawej stronie serwisu.

40 komentarzy

Dodaj komentarz
  1. A wystarczyło (przynajmniej na dłużej) użyć unsigned int to max wyświetleń byłoby wtedy 4,294,967,295.

    Używanie inta ze znakiem nie ma sensu w wypadku rzeczy których wartość mniejsza od 0 jest bezsensowna (jak w wypadku wyświetleń wideo).

    • Nie każda baza danych wspiera 32bit uint. Oczywiście można trzymać w postaci int + Int32.MinValue… ale to jest niepotrzebna komplikacja – już chyba łatwiej na stałe korzystać z int64.

    • Skoro jednak przekroczyło 2 mld, to ryzyko, że w przyszłości przekroczy 4 mld jest niepomijalne, tak więc po co robić coś dwa razy? Jeśli poprawiać to porządnie.

    • Przekręcił się zwykły, to unsigned też się może przekręcić- w końcu połowa drogi już za nami ;)

    • Czasem wartości ujemne są wykorzystywane do przekazania informacji o błędzie.

    • uint? mamy 32 bity i jeden oszczędzamy… “tyle wygrać!”
      nie ma sensu takich cudów używać.

    • Idąc tym tokiem rozumowania IPv6 miałby adresy 33 bitowe. Jak już rozwiązać problem to na dobre, a nie babrać się za chwilę z tym samym.

    • Był ten wątek poruszany na reddicie i zacytowano tam wewnętrzne wytyczne google: “when in doubt use bigger range”. Poza tym powodów na nieużywanie unsigned jest sporo. Głównie chodzi o możliwe problemy z programami napisanymi w różnych językach.

      Zmieniając na unsigned zyskaliby raz tyle czasu (zakładając stały liniowy przyrost liczby obejrzeń filmika), a przechodząc na 64 bity zyskali 2^32, czyli mają problem na pewno z głowy.

    • Google stawia na “idiotoodporny” kod, specyficznie wyznając credo a la “Unsigned Integral Types Considered Harmful”:

      https://google-styleguide.googlecode.com/svn/trunk/cppguide.html#Integer_Types

      “On Unsigned Integers

      Some people, including some textbook authors, recommend using unsigned types to represent numbers that are never negative. This is intended as a form of self-documentation. However, in C, the advantages of such documentation are outweighed by the real bugs it can introduce. Consider:

      for (unsigned int i = foo.Length()-1; i >= 0; –i) …

      This code will never terminate! Sometimes gcc will notice this bug and warn you, but often it will not. Equally bad bugs can occur when comparing signed and unsigned variables. Basically, C’s type-promotion scheme causes unsigned types to behave differently than one might expect.

      So, document that a variable is non-negative using assertions. Don’t use an unsigned type.”

      @MM: zgadza się, wartości “out of band” są zawsze przydatne (np. dla reprezentacji EOF itp.).

  2. @SuperTux, ale nie wszędzie uint jest dostępny (np. w Javie go nie ma).

  3. @SuperTux: ma sens. Zobacz tę dyskusję: https://groups.google.com/d/msg/pl.comp.lang.c/UlvoQJnwi4I/4BBsk-BmznMJ

  4. Ja pierd…. Ale to musi być kasa z reklam na YT? Jaka to liczba? 2 biliardy?

    • miliardy

    • 2 miliardy długiej skali (używanej między innymi w Polsce) lub 2 biliony krótkiej skali (używane na przykład w Anglii)

    • 2 biliardy? Ktoś tu chyba nie zna podstaw matematyki…

    • tylko miliardy

    • Kasa z reklam wcale nie tak duża, wczoraj newsa gdzieś widziałem że ktoś policzył i wyszło niecałe 80k$. To imho niewiele jak za taką popularność.

  5. 2 miliardy na taki badziew – ta cywilizacja musi się skończyć

  6. To niech teraz ktoś ze sporym botnetem pokusi się o (nie)małego DDoSa :) wystarczy 1 request na sekundę :)
    Tak, wiem, szkoda botnetu :P

    • Mam obawy ze po ddosie zwyczajnie cofnęli by licznik z backupu ;)

    • jutub ma jakis dziwny mechanizm potwierdzajacy obejrzenie
      samo wejscie na strone nie dodaje obejrzenia do filmu ;c

    • dla kasy za reklamę, albo dla wyświetlenia jako ‘najpopularniejsze dzisiaj, w tym tygodniu, miesiącu…’?

    • Czy ja wiem, czy szkoda… Pieniądze to nie wszystko, ambicja się liczy! :D

    • Na youtube trzeba oglądnąć podobno jakiś procent filmu aby się naliczyło wyświetlenie.

    • Trochę bezsensowny taki DDoS, poza tym Google przewidziało tę sytuację wcześniej i zrobili upgrade. “We never thought” nie znaczy że nie byli przygotowani :D Po prostu podzielili się informacją, że ilość wyświetleń przeskoczyła wartość 32-bitowego integer’a.

      @JuniorJPDJ: Jedna rzecz to obejrzenie i zapisanie wizyty, a inna odświeżenie widoku. Jeżeli każda wizyta każdej osoby miałaby pobierać prawidłową ilość, to serwery obsługujące bazy nic innego by nie robiły, tylko liczyły wizyty :D

      Do obsługi tak dużych baz stosuje się zaawansowane algorytmy cache’owania pewnych danych – raz na np. 24h skrypty pobierają/przeliczają wyświetlenia i zapisują wynik. Ten zapisany wynik będziesz widział do czasu uruchomienia następnego liczenia.

  7. Cyber killer: Oj na pewno nie jest to 80k$ z reklam, tak ze dwa zera dopisz (co z resztą i tak nie jest kwotą oszałamiającą w porównaniu do tego co dostała np. Kim Kardashian za swoje dupsko).

    • source: http://www.geeksaresexy.net/2014/12/03/gangnam-style-breaks-youtubes-32-bit-barrier/ – info o kwocie jest w 6 akapicie, to na bazie kwot jakie były wypłacone za inne utwory, szczegóły w tam podlinkowanym tekście z guardiana. Ogółem jestem w stanie zgodzić się że na reklamach guzik się zarabia, o ile nie jest się pewną firmą na G.

    • Nawet, jeśli jest to te rzeczone 800 tyś. $, to biorąc pod uwagę koszt zamieszczenia filmu w necie (niemal zerowy), to należy stwierdzić, że na pewno bardziej opłacalne niż wykupywanie czasu antenowego w TV.

  8. Ludzie nauczcie się poprawnie czytać i pisać!!! Tytuł to: “Gangnam Style” a nie Gangam Style

    • Oppa gangam stajl

  9. Ja się może przypierdzielam, ale przypadkiem nie jest to wartośc o oczko mniejsza? 2**63-1 to 9223372036854775807, a nie 9223372036854775808!

  10. Troche szybkiej matmy:

    Jeśli nigdzie nie dałem plamy to by przepełnić licznik potrzeba 2 miliardy 924 milionów 712 tysiecy i 86 ludzi, którzy przez 1000 lat co sekundę zrobią ++i.
    60*60*24*365*1000 = 315360000 // pomijamy lata przestępne

    Nie wspominając już nawet o długości filmiku który trzeba objerzeć.
    Challenge definitely rejected.

    /me making coffee && planning how to conquer the world with single pythn script ;)

    • No, na tym polega żart. To tak jakby ktoś Cię poprosił, żebyś spróbował na procesorze przekręcić 64 bitowy rejestr samą operacją inkrementacji o 1 zaczynając od 0.

      Podpowiadam: nawet prawnuki Twoich prawnuków tego nie dożyją ;)

      Ogólnie 2^64 to w ch*j.

  11. Zastanawiam się, czy oni rzeczywiście zmienili typ zmiennej na int64, czy stworzyli dodatkową bazę “megaPrzeFilmy”, która będzie przechowywać filmy z ilością wyświetleń przypuśćmy 2mld+. Jedyną zmianą w stosunku do właściwej bazy(baz) byłaby zmiana typu na int64.

    Nie znam topologii (w sumie nawet bym pewnie nie ogarnął) wszystkich baz danych i relacji między nimi, ale ja myślałbym w tym kierunku :) Po po co rezerwować 32bity*ilosc_filmow_yt przestrzeni, kiedy filmów 2.1mld+ wyświetleń będzie kilka(naście/set). Zresztą przy takiej ilości danych, kwestia jest znacznie bardziej złożona, niż “kilka baz i relacji”.

    • Dobrze mówi, dać mu wódki ;)

    • Czym jest 8 bajtów w porównaniu z rozmiarem całego, nawet bardzo krótkiego filmu?

    • @a: “Czym jest 8 bajtów w porównaniu z rozmiarem całego, nawet bardzo krótkiego filmu?” – niech zgadnę,jesteś “programistą Javy” ? W przypadku 1 filmu niby nic wielkiego,w przypadku wielu filmów jednak, to TEŻ jest przestrzeń dyskowa i przestrzeń pamięci. Gdyby wszyscy tak myśleli problemów, z przepełnieniem bufora by nie było – wszyscy używaliby największych dostępnych zmiennych w programach :P No zresztą analogicznie,gdyby ludzie przejmowali się masowo fuzzingiem od promieniowania kosmicznego każdy używałby choć pamięci ECC.Tak jednak NIE JEST. A mało tego,niektórzy przetaktowują np. procesory ;) Dla większości ludzi i firm koszty się liczą bardziej, jak wysoka poprawność działania i eksploatacji.Pomysł z podbazą również moim osobistym zdaniem jest dużo bardziej wydajny – JQ ma racje.Nie wiem,jak wg. specjalistów google,ale pod względem wydajności modułowość jest akurat często całkiem dobra o ile komunikacja między modułami nie nawala – jeśli chodzi o bezpieczeństwo jednak nie musi bo to bardziej skomplikowane.

  12. Ta jasne

    https://s.ytimg.com/yts/jsbin/www-en_US-vflBNYrhc/watch_gangnam_overflow.js

    Fajna beka z komentarzy przynajmniej. Szkoda, że nie zeszło się z pierwszym kwietnia. :]

Odpowiadasz na komentarz telpeloth

Kliknij tu, aby anulować

Zamieszczając komentarz akceptujesz regulamin dodawania komentarzy. Przez moderację nie przejdą: wycieczki osobiste, komentarze nie na temat, wulgaryzmy.

RSS dla komentarzy: