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.