Rozważamy użycie wartości UUID jako kluczy podstawowych dla naszej bazy danych MySQL. Wstawiane dane są generowane z dziesiątek, setek, a nawet tysięcy zdalnych komputerów i są wstawiane z szybkością 100-40 000 wstawień na sekundę, a my nigdy nie wykonamy żadnych aktualizacji.
Sama baza danych zazwyczaj osiąga około 50 milionów rekordów, zanim zaczniemy wybierać dane, więc nie jest to ogromna baza danych, ale też nie mała. Planujemy również działać na InnoDB, chociaż jesteśmy otwarci na zmianę tego, jeśli istnieje lepszy silnik do tego, co robimy.
Byliśmy gotowi do użycia identyfikatora UUID Java Type 4, ale podczas testów zauważyliśmy dziwne zachowanie. Po pierwsze, przechowujemy jako varchar (36) i teraz zdaję sobie sprawę, że lepiej byłoby użyć binarnego (16) - chociaż nie jestem pewien, o ile lepiej.
Większe pytanie brzmi: jak bardzo te losowe dane psują indeks, skoro mamy 50 milionów rekordów? Czy byłoby lepiej, gdybyśmy na przykład użyli identyfikatora UUID typu 1, w którym skrajne lewe bity miały znacznik czasu? A może powinniśmy całkowicie porzucić UUID i rozważyć klucze podstawowe auto_increment?
Szukam ogólnych przemyśleń / wskazówek na temat wydajności różnych typów UUID, gdy są one przechowywane jako indeks / klucz podstawowy w MySQL. Dzięki!