Mam bazę MongoDB, więc wszystko odbywa się nierelacyjnie, 0 JPA, SQLa itd.
Załóżmy, że mam w bazie 2 kolekcje: local i order. Zadanie, które chce wykonać to pobrać wszystkie ordery z danego local (czyli wszystkie zamówienia w danym lokalu). I mogę to zrobić na 2 sposoby, ale nie wiem który z nich jest wydajniejszy. Sposób pierwszy:
Local posiada pole List<String> orderIds w którym przechowuje ID orderów. Użytkownik podaje tylko localId, aplikacja wyciąga local po ID, następnie wyciąga wszystkie IDki orderów z tej listy i dla każdego ID wykonuje findOrderById(String id). Minusem jest, że jeżeli lista orderIds będzie duża to będzie dużo pojedynczych strzałów do bazy. Dlaczego w ogóle rozważam ten pomysł? Bo unikam tutaj skanowania całej kolekcji order od góry do dołu. Po prostu wyciągam każdy order w czasie o(1).
Drugi sposób:
Tworzę metodę findOrdersByLocalId(String localId) i prawdopodobnie (tak mi się wydaje) pod spodem będzie to czego unikam w kroku pierwszym czyli przelot przez całą kolekcję order i wybieranie do zwrócenia tych w których pole LocalId równa się LocalId podanemu w parametrze metody. Minusy: Czas o(n), plusy: jedno zapytanie.