MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Najlepszy model do przedstawiania relacji wiele do wielu za pomocą atrybutów w MongoDB

Pod wieloma względami API meteor zachęca do tworzenia płaskich dokumentów relacyjnych, jednak MongoDB jest magazynem danych nierelacyjnych. Ten konflikt jest niestety pozostawiony programiście jako ćwiczenie do rozwiązania.

Pojęcie struktury schematu i złączeń to ogromny temat do omówienia w ramach jednej odpowiedzi, więc postaram się być tak zwięzły, jak to tylko możliwe.

Powody, dla których warto wybrać model relacyjny

Załóżmy, że masz komentarze i dane postów. Zastanów się, co by się stało, gdybyś osadzał komentarze w swoich postach.

  • DDP operuje na dokumentach. Wszystkie komentarze zostaną wysłane za każdym razem, gdy dodany zostanie nowy komentarz w tym samym poście.

  • allow i deny zasady działają na dokumentach. Oczekiwanie, że te same zasady mają zastosowanie jednocześnie do postów i komentarzy, może być nierozsądne.

  • Publikacje mają zwykle większy sens pod względem kolekcji. W powyższym scenariuszu nie mogliśmy łatwo opublikować listy komentarzy niezależnie od ich postów.

  • Relacyjne bazy danych istnieją z dobrych powodów. Jednym z nich jest uniknięcie problemu z wielokrotnymi modyfikacjami nieodłącznie związanego z drugim rozwiązaniem.

Powody, dla których warto wybrać model osadzony

  • Dołączenia nie są obsługiwane natywnie przez MongoDB i nie ma pakietu podstawowego, który tworzyłby sprzężenie reaktywne.

Zalecenia

Skorzystaj z trzeciego rozwiązania. Z mojego doświadczenia wynika, że ​​powody wyboru modelu relacyjnego znacznie przewyższają ograniczenia nałożone przez magazyn danych. Oczywiście przezwyciężenie braku złączeń nie jest łatwe, ale problem prawdopodobnie dotyczy tylko kilku funkcji publikowania. Oto kilka zasobów, które gorąco polecam:

  • Jak opublikować relację wiele-do-wielu na EventedMind. Chris szczegółowo opisuje Twój przypadek użycia, jednak ręcznie wykonuje połączenie reaktywne z obserwacją wywołań zwrotnych, czego nie polecam.

  • Reactive dołącza do meteoru z Encyklopedii Discover Meteor. Obejmuje to podstawy tego, jak i dlaczego należy wykonać sprzężenie reaktywne.

  • Rozdział o denormalizacji z Discover Meteor. Obejmuje to wiele punktów, które przedstawiłem powyżej, a także mówi o tym, kiedy i jak denormalizować niektóre dane.

  • Możesz użyć publikowania z relacjami, aby połączyć swoje dane. Alternatywne pakiety obejmują:inteligentne publikowanie, publikowanie złożone i proste publikowanie.

Jeśli potrzebujesz więcej informacji, proszę o komentarz poniżej, a ja zaktualizuję moją odpowiedź.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tablica Mongodb $push i $pull

  2. Błąd:queryTxt ETIMEOUT podczas łączenia się z MongoDb Atlas przy użyciu Mongoose

  3. Dostęp do MongoDB z Go

  4. Mongoose:jakie są różnice między Model.create i Collection.insert

  5. Mongoose, CastError:Przesyłanie do tablicy nie powiodło się podczas próby zapisania modelu zawierającego model