consdata.com
Blog techniczny Blog biznesowy Dział HR
EN
mongodb

Czy wiesz do czego służy Outlier Pattern w MongoDB?

author Barbara Mitan
14 lipca 2023

Wzorzec ten jest stosowany, kiedy większość danych można i warto zamodelować w jeden sposób, ale dla niewielkiego odsetka dokumentów, które odstają od normy, będzie to nieakceptowalne lub niemożliwe.

Przykład

Przedstawmy wzorzec Outlier na przykładzie. Załóżmy, że mamy kolekcję books, w której przechowujemy książki z podstawowymi danymi. Chcemy też łatwo wyciągnąć informację, kto kupił daną książkę - żeby na tej podstawie rekomendować inne książki.

Możemy zdecydować się na zapisywanie identyfikatorów użytkowników w naszym dokumencie książki zamiast osobno. Dla większości książek będzie to najwydajniejsze rozwiązanie.

{
    "_id": 12,
    "title": "MongoDB Patterns",
    ...,
    "customers_purchased": ["user00", "user01", "user02"]
 
}

Może się jednak okazać, że dla bestsellerów przekroczymy dopuszczalny maksymalny rozmiar dokumentów - 16 MB. Jeśli zdecydujemy się wyciągnąć te informacje z books do osobnej kolekcji, to skończymy z rozwiązaniem działającym dla wszystkich przypadków, ale niewydajnym dla ponad 99% z nich.

Chcąc mieć wydajność pierwszego rozwiązania bez jego ograniczeń, z dodatkową obsługą tylko dla niewielkiej liczby dokumentów, wprowadzamy wzorzec Outlier.

Nadal większość dokumentów będzie przechowywać identyfikatory w polu customers_purchased i będą wyglądać dokładnie tak jak pierwszy przykład. Jeśli liczba użytkowników, która kupiła daną książkę, przekroczy określony przez nas limit, np. 1000, kolejnych użytkowników zaczynamy przechowywać osobno, a do tego dokumentu dodamy flagę has_extras z wartością true.

{
    "_id": 13,
    "title": "Clean code",
    ...,
    "customers_purchased": ["user00", "user05", "user06", ...],
    "has_extras": "true"
}
{
  "book_id": 13,
  "customers_purchased": ["user6045", "user3451", "user1242", ...]
}

Musimy zadbać o to, żeby dociągnąć potrzebne informacje dla dokumentów z has_extras. Warto jednak robić to w jednym miejscu w kodzie, a we wszystkich innych ta flaga i cały design powinny być tak naprawdę transparentne i nie mieć wpływu na resztę kodu aplikacji.

Zastosowania

Inne zastosowania to relacje (polubienia, obserwowanie) w sieciach społecznościowych czy recenzje filmów. Popularne osoby, filmy, książki mogą zaburzyć standardowe zastosowania i typową liczbę powiązań.

Źródła

  • https://www.mongodb.com/developer/products/mongodb/outlier-pattern/
  • https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design
Najnowsze wpisy

  • Dostępność w PDF - dokumenty bez barier
  • Czy wiesz, że z pomocą @starting-style można animować elementy z display: none za pomocą samego CSS?
  • Czy wiesz, że w Angular 17 została wprowadzona alternatywa dla *ngSwitch?
Dołącz do nas

  • SENIOR FULLSTACK DEVELOPER (JAVA + ANGULAR) Poznań (hybrydowo) lub zdalnie UoP 14 900 - 20 590 PLN brutto
    B2B 19 680 - 27 220 PLN netto
  • REGULAR FULLSTACK DEVELOPER (JAVA + ANGULAR) Poznań (hybrydowo) lub zdalnie UoP 11 300 - 15 900 PLN brutto
    B2B 14 950 - 21 000 PLN netto
  • ZOBACZ WSZYSTKIE OGŁOSZENIA

newsletter

techniczny

Zapisz się

Podobne wpisy

post-image
WCAG

Dostępność w PDF - dokumenty bez barier

author
Kacper Hoffman 28 kwi 2025
post-image
angular

Czy wiesz, że z pomocą @starting-style można animować elementy z display: none za pomocą samego CSS?

author
Piotr Tatarski 7 kwi 2025
post-image
angular

Czy wiesz, że w Angular 17 została wprowadzona alternatywa dla *ngSwitch?

author
Dorian Mejer 10 mar 2025
Dołącz do nas

  • SENIOR FULLSTACK DEVELOPER (JAVA + ANGULAR) Poznań (hybrydowo) lub zdalnie UoP 14 900 - 20 590 PLN brutto
    B2B 19 680 - 27 220 PLN netto
  • REGULAR FULLSTACK DEVELOPER (JAVA + ANGULAR) Poznań (hybrydowo) lub zdalnie UoP 11 300 - 15 900 PLN brutto
    B2B 14 950 - 21 000 PLN netto
  • ZOBACZ WSZYSTKIE OGŁOSZENIA

Zapisz się na

newsletter

techniczny

consdata.com
  • Kontakt

    • sales@consdata.com
    • +48 61 41 51 000

  • Biuro

    • K9Office
      Krysiewicza 9/14
      61-825 Poznań
      Polska

  • Rozwiązania

    • Eximee
    • Kouncil
  • Blog Dołącz do nas
Copyright © 2024 Consdata. All rights reserved. Privacy Policy & Cookies
Chcemy używać plików cookie oraz skryptów podmiotów trzecich do polepszania funkcjonowania tej strony Zgadzam się