Utworzyłem aplikację w Railsach na Heroku przy użyciu bazy danych PostgreSQL.Czy klucz UUID jako klucz podstawowy w PostgreSQL daje niepoprawną wydajność indeksu?
Ma kilka stołów zaprojektowanych, aby móc synchronizować z urządzeń mobilnych, w których dane mogą być tworzone w różnych miejscach. Dlatego mam pole uuid, które jest ciągiem przechowującym identyfikator GUID oprócz klucza kluczowego auto increment. Uuid to ten, który jest komunikowany między serwerem a klientami.
Po uruchomieniu mechanizmu synchronizacji po stronie serwera zdałem sobie sprawę, że prowadzi to do problemów z wydajnością, gdy trzeba odwzorować między uuid < -> id cały czas (podczas pisania obiektów, muszę zapytać o identyfikator użytkownika, aby uzyskać identyfikator przed zapisaniem, a odwrotnie przy wysyłaniu danych).
mam teraz myśleć o przejściu na tylko za pomocą UUID jako klucz podstawowy dzięki czemu pisanie i czytanie o wiele prostsze i szybsze.
Czytałem, że UUID jako klucz podstawowy czasami może dać złe wyniki indeksu (indeks) fragmentacji przy użyciu indeksu klastrowego klucza podstawowego. Czy PostgreSQL cierpi na ten problem, czy może używać UUID jako klucza podstawowego?
już mam kolumnę UUID dzisiaj więc przechowywanie mądry będzie lepiej, bo upuść kolumnę id regularny.
Czy pole "id" jest używane jako klucz obcy przez jakąkolwiek inną relację w bazie danych? Czy zachowujesz tylko to pole "id", ponieważ uważasz, że KEY PRIMARY powinien być typem seryjnym z powodów, które opisałeś? –
Tworzenie klastrów za pomocą syntetycznego klucza podstawowego to korzyść tylko wtedy, gdy masz często dostęp do ścieżki, która chce zapytać o zakres tych wartości pkeya - jest to dość rzadkie w prawdziwym świecie. UUID jest idealnie cienkim typem dla klucza podstawowego, jest wystarczająco kompaktowy (16 bitów) i szybszy w porównaniu z tekstem. – dbenhur
@Joshua Pola id są używane jako klucze obce, pola UUID są używane tylko jako zwykłe pola używane do odwoływania się do relacji podczas komunikacji (to potrzeba tłumaczenia między nimi przez cały czas) – thejaz