Używam MongoDB jako bazy danych dla sieci serwerów gier. Każdy gracz w sieci ma dwa sposoby identyfikacji: swoją nazwę użytkownika i UUID. Oba pola są unikalne dla każdego gracza i często przydatne jest odzyskanie UUID gracza na podstawie jego nazwiska, odzyskanie jego nazwiska na podstawie jego UUID i odzyskanie całego dokumentu z podaniem jego nazwiska lub UUID. Bez względu na wymagania przestrzenne, jaki schemat indeksowania pozwoli na najszybsze działanie tych zapytań?

Moim pomysłem jest stworzenie unikalnego indeksu dla każdego z dwóch pól, ale jestem ciekaw, czy MongoDB oferuje lepsze optymalizacje, zwłaszcza gdy chcę pobrać tylko jedno pole, biorąc pod uwagę drugie. Czytałem, że indeksy złożone mogą pozwolić na objęte zapytaniami, w których nie trzeba pobierać pełnego dokumentu, ale nie jestem pewien, czy może to obniżyć wydajność w porównaniu z posiadaniem jednego indeksu dla każdego pola.

0
Michael Jarrett 7 listopad 2018, 00:08

1 odpowiedź

Najlepsza odpowiedź

Wydajność jest zawsze sprowadzana do wąskiego gardła (czy to dysku I/O, sieci, procesora czy pamięci RAM), ale jeśli dokumenty odtwarzacza są bardzo duże, pomocne mogą być dwa indeksy złożone: [UUID,nazwa użytkownika] i [nazwa użytkownika,UUID]. Pierwszy z nich będzie najskuteczniejszym sposobem na odzyskanie nazwy użytkownika podanej w UUID, a drugi pomoże w odzyskaniu UUID podanego w nazwie użytkownika.

W praktyce jednak myślę, że unikalne indeksy tylko dla [nazwa użytkownika] i [UUID] byłyby prawie tak samo szybkie.

0
Daniel Rothig 7 listopad 2018, 00:17