![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 130 Pomógł: 0 Dołączył: 18.09.2021 Ostrzeżenie: (0%) ![]() ![]() |
Hej. Mam bazę ok. 2mln rekordów. Każdemu chcę nadać indywidualny, losowy hash skłądający się z 5-ciu cyfr lub małych i dużych znaków. Stworzyłem coś takiego:
Z początku działa szybko (wiadomo, nie ma jeszcze tyle hashy co się powtarzają) ale pod koniec wolniej. Na obecnej maszynie oszacowałem czas wykonywania się tego kody na 50-100 godzin. Jak mogę to zoptywalizować? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 105 Dołączył: 7.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
Już to pewnie zdążyłeś załatwić, ale jeszcze dodam coś innego dla zainteresowanych.
base 62 posiada wszystkie cyfry oraz małe i duże litery ASCII. Dla pięcioznakowych id złożonych z tych znaków, ich kombinacji jest w sumie 62^5 = 916132832 Losuj dowolną liczbę od 0 czy 1 do tych 900+ milionów i zamieniaj ją na base 62: Jeszcze można dodawać zera z przodu, gdyby wylosowało niską liczbę i znaków było mniej niż 5. Tym sposobem możesz też zamieniać istniejące id na znaki, ale naturalnie w tym wypadku pojawi się zauważalny wzór w id, jeśli były one po kolei. Ten post edytował kreatiff 17.01.2023, 16:11:31 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 02:17 |