Potrzebuję pomocy w modelowaniu moich danych w Mongo. Większość moich doświadczeń dotyczyła relacyjnych baz danych, dopiero zaczynam od mongo. Modeluję dane dla różnych zdarzeń.Mongodb: wiele kolekcji lub jedna duża kolekcja z indeksem
- Każde "zdarzenie" z tymi samymi polami.
- Każde "zdarzenie" będzie zawierać setki do milionów dokumentów/wierszy.
- Zdarzenia są dynamiczne, tzn. Nowe będą tworzone w razie potrzeby. np. może utworzyć nowe wydarzenie "Letnie Igrzyska Olimpijskie 2016".
Prawdopodobnie najważniejsze przy obsłudze zdarzeń (operacje CRUD) użytkownicy będą musieli podać nazwę zdarzenia.
Widzę kilka sposobów, aby to zrobić do tej pory i nie chcę popełnić poważnego błędu w konfiguracji mojego modelu danych "w niewłaściwy" sposób.
1) Jeden zbiór "zdarzeń" zawierający dane dla wszystkich zdarzeń. Indeks nazwy "zdarzenia". Kwerenda będzie wyglądać następująco:
db.events.find({event: 'Summer Olympics 2012');
{event: 'Summer Olympics 2012', attributes: [{name: 'joe smith', .... }
{event: 'Summer Olympics 2012', attributes: [{name: 'jane doe', .... }
{event: 'Summer Olympics 2012', attributes: [{name: 'john avery', .... }
{event: 'Summer Olympics 2012', attributes: [{name: 'ted williams', .... }
db.events.find({event: 'Summer Olympics 2013'})
{event: 'Summer Olympics 2016', attributes: [{name: 'steve smith', .... }
{event: 'Summer Olympics 2016', attributes: [{name: 'amy jones', .... }
2) Kolekcja dla każdego nowego wydarzenia, które się pojawi, w/collection, aby śledzić wszystkie nazwy zdarzeń. Brak indeksu nazwy wydarzenia, ponieważ każde zdarzenie jest przechowywane w innej kolekcji.
// multiple collections, create new as needed
db.summer2012.find() // get summer 2012 docs
db.summer2016.find() // get summer 2016 docs
//'events' collection
db.events.find() // get all events that I would have collections for
{name: 'summer2012', title: 'Summer Olympics 2012};
{name: 'summer2016', title: 'Summer Olympics 2016};
Dla # 1 Jestem trochę zaniepokojony, że kiedyś osiągnie 100 zdarzeń każdy z milionami rekordów wyszukiwań za „zdarzenie” będzie powolny, nawet jeśli jedno z wydarzeń ma tylko 500 dokumentów.
Dla # 2 Czy "omijam" model mongo tutaj, tworząc nową kolekcję za każdym razem, gdy wydarzenie przychodzi?
Wszelkie komentarze/pomysły są mile widziane, ponieważ nie mam pojęcia, który z nich osiągnie lepsze wyniki, a który z nich sprawi, że będę miał więcej problemów w drodze. Rozejrzałem się (strona mongo zawiera) i nie mogę znaleźć konkretnej odpowiedzi.
Co to za atrybuty? Ludzie? Czy masz wydarzenia x osoby, które biorą udział w wydarzeniu? Czy te osoby są zarejestrowane w twoim systemie? Jeśli dopiero zaczynasz od MongoDB, spójrz na to: https://code.google.com/p/morphia/wiki/QuickStart – rbento
Niestety zły przykład :(. Naprawdę jest to jego dane geoprzestrzenne. , y dla każdego dokumentu Użytkownicy mogą łatwo dodać/upuścić pinezkę na mapie dla swojej bieżącej lokalizacji i dołączyć pewne metadane dotyczące tej lokalizacji, np. zdjęcia/wideo, tytuł, pogoda itp. Wyobraźcie sobie grupę ludzi na olimpiadzie, dodając nowe dane.Ludzie/lokalizacje same różnice.Kwestia jest taka, że każde "zdarzenie" może mieć miliony dokumentów, jeśli każde oddzielne wydarzenie będzie żyło we własnym zbiorze, lub wyrzucić wszystkie zdarzenia do tej samej kolekcji? Jedna kolekcja z 10 milionami dokumentów, lub 10 kolekcje, z których każda ma ~ 1 milion dokumentów. – lostintranslation
Także zaczyna się w Mongo, myślę, że ta część instrukcji jest ważna: http://docs.mongodb.org/manual/applications/indexes/. To prowadzi mnie do tej imprpessji ten projekt db MongoDb, może i powinien być bardzo podobny do projektowania db, i tak bym pulmp for yr first option, szczególnie jeśli zamierzasz robić zapytania "cross-event" –