Muszę przechowywać 128 bitów liczb całkowitych bez znaku w MySQL i zastanawiałem się, jaki jest najlepszy typ danych do przechowywania tak dużych liczb.
Obecnie używam, binary(16)
ale wymaga to dużej ilości funkcji konwersji pack(/huge number in hex .../)
.
Czy istnieje najlepszy typ danych do przechowywania 128-bitowej liczby całkowitej bez znaku?
Odpowiedzi:
Nie wiem, jaki jest najlepszy sposób na przechowywanie go - ale jest co najmniej lepsza opcja niż użycie
varchar(39)
(lubvarchar(40)
jeśli potrzebujesz podpisu); zamiast tego użyjdecimal(39,0)
. Z dokumentów mysql :Jest zapakowany, więc zajmie mniej miejsca niż varchar ( 18 bajtów, jeśli dobrze wykonuję matematykę), i mam nadzieję, że będziesz w stanie wykonać matematykę bezpośrednio, ale mam nigdy nie próbowałem z tak dużą liczbą, aby zobaczyć, co się stanie.
źródło
Zadałem sobie to pytanie i ze wszystkich przeczytanych postów nigdy nie znalazłem żadnych porównań wydajności. Oto moja próba.
Utworzyłem następujące tabele wypełnione 2 000 000 losowymi adresami IP ze 100 losowych sieci.
Następnie wybieram wszystkie adresy IP dla każdej sieci i rejestruję czas odpowiedzi. Średni czas odpowiedzi na tabeli twobigints wynosi około 1 sekundy, podczas gdy na tabeli binarnej jest to około jednej setnej sekundy.
Oto pytania.
Średni czas reakcji:
źródło
Uważam, że jedyną inną opcją jest przechowywanie go w
varchar(39)
polu.źródło