Zamierzam zbudować swój pierwszy prawdziwy projekt w Railsach, który składa się z aplikacji internetowej złożonej z 3 głównych części:
- Część statyczna, w której nie jest używana baza danych
- Część rejestracji użytkownika, która będzie wymagać bazy danych i mogę używać MySQL, ponieważ każdy wiersz użytkownika będzie miał te same pola
- „Aplikacja”, w której użytkownicy będą mogli tworzyć, organizować, edytować ... elementy w kolekcjach i udostępniać je innym użytkownikom
Będzie kilka typów elementów i każdy będzie miał inne opcje, na przykład mogę mieć elementy „wideo” z następującymi opcjami:
- ID
- identyfikator użytkownika
- id_kolekcji
- tytuł
- platforma (jeśli jest osadzona)
- adres URL (jeśli jest osadzony)
- nazwa pliku (jeśli hostowany w mojej aplikacji)
- rozmiar pliku (identyfikator hostowany w mojej aplikacji)
i elementy „mapy”:
- ID
- identyfikator użytkownika
- id_kolekcji
- tytuł
- platforma (mapy google, mapy bing ...)
- Lokalizacja
- adres URL
- rozmiar mapy
Jak możesz, podczas gdy dla użytkowników mogę używać MySQL dla przedmiotów, elastyczność MongoDB może być przydatna, ponieważ każdy element może wymagać innych opcji niż inny element
Do tej pory zawsze używałem PHP i MySQL (zawsze na współdzielonym hostingu dla małych projektów), a skalowalność to dla mnie zupełnie nowe słowo.
Mam czas na naukę, ale chciałbym móc zrobić coś konkretnego w ciągu 1 miesiąca.
Dużo czytałem o MongoDB i NoSQL kontra RDMS i MySQL i po wypróbowaniu muszę powiedzieć, że podoba mi się działanie MongoDB: brak tabel, wierszy i dokumentów JSON takich jak:
- W mojej sytuacji, co byś polecił? dlaczego?
- Jeśli chodzi o skalowalność, mogą występować problemy z MongoDB? jeśli tak, kiedy (pod względem rozmiaru DB) i czy problemy te mogą znacznie spowolnić moją aplikację?
Edycja: jak będzie działać aplikacja
Ponieważ wielu pytało o to, jak chciałbym, aby aplikacja działała:
- Rejestracja użytkownika
- On jest zalogowany
- Tworzy swoją pierwszą kolekcję na stronie, którą może tworzyć nieskończone przedmioty
- Elementy są różnego rodzaju i każdy typ potrzebuje różnych danych, aby zapisać w bazie danych, a typ elementów można dodawać lub modyfikować
Użytkownicy mogą tworzyć w nim inne kolekcje i przedmioty.
Mamy więc CRUD dla kolekcji i przedmiotów w nich zawartych, a każda kolekcja / pozycja jest skierowana do konkretnego użytkownika
Główny problem z MySQL polega na tym, że nie ma on elastycznego schematu, istnieje sposób na rozwiązanie tego (obejście?)?
Myśląc o NoSQL, jedyne wątpliwości, które mam, dotyczą przyłączenia, na przykład biorąc pod uwagę pewną kolekcję, chcę pobrać dane związane z użytkownikiem o polu id = identyfikator_użytkownika w kolekcji
EDYCJA: Pomysł, aby nadal używać MySQL
Utwórz pole w tabeli „przedmiotów” z opcjonalnymi ustawieniami, każde ustawienie podzielone przez | lub inny symbol.
Następnie zapiszę gdzieś strukturę opcjonalnych ustawień każdego elementu, na przykład typ elementu „notatki” potrzebuje dwóch opcjonalnych ustawień „kolor” i „dziwny_zestaw”, kiedy otrzymam dane z MySQL, podzielę pole dla opcjonalnych ustawień na tablica wiedząc, że pierwszy element w tablicy dotyczy „koloru” i tak dalej.
Co myślisz? czy jest problem z tym rozwiązaniem? masz inne pomysły?