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.
1 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.
Podobne pytania
Nowe pytania
mongodb
MongoDB to skalowalna, wysokowydajna, zorientowana na dokumenty baza danych NoSQL typu open source. Obsługuje wiele języków i platform do tworzenia aplikacji. Pytania dotyczące administrowania serwerem można zadawać na stronie https://dba.stackexchange.com.