Costruirò il mio primo vero progetto in Rails che consiste in un'app Web composta da 3 parti principali:
- La parte statica in cui non viene utilizzato alcun database
- La parte di registrazione dell'utente che richiederà un database e posso usare MySQL poiché ogni riga dell'utente avrà gli stessi campi
- L '"App" in cui gli utenti saranno in grado di creare, organizzare, modificare ... elementi nelle raccolte e condividerli con altri utenti
Ci saranno diversi tipi di elementi e ognuno avrà diverse opzioni, ad esempio potrei avere elementi "video" con le seguenti opzioni:
- id
- ID utente
- collection_id
- titolo
- piattaforma (se integrata)
- url (se incorporato)
- nome file (se ospitato sulla mia app)
- dimensione del file (ID ospitato sulla mia app)
e "mappa" elementi:
- id
- ID utente
- collection_id
- titolo
- piattaforma (google maps, bing maps ...)
- Posizione
- url
- dimensione della mappa
Come puoi mentre per gli utenti posso usare MySQL per gli articoli, la flessibilità di MongoDB può essere utile poiché ogni articolo potrebbe aver bisogno di opzioni diverse rispetto a un altro oggetto
Fino ad ora ho sempre usato PHP e MySQL (sempre su hosting condiviso per piccoli progetti) e la scalabilità è una parola totalmente nuova per me.
Ho tempo per imparare ma vorrei essere in grado di fare qualcosa di concreto in qualcosa come 1 mese.
Ho letto molto su MongoDB e NoSQL vs RDMS e MySQL e dopo averlo provato devo dire che mi piace il modo in cui MongoDB funziona: niente tabelle, niente righe e i suoi documenti come JSON in questo modo:
- Nella mia situazione cosa consiglieresti? perché?
- A proposito di scalabilità potrebbero esserci problemi con MongoDB? se sì quando (in termini di dimensioni del DB) e questi problemi possono rallentare notevolmente la mia app?
Modifica: come funzionerà l'app
Poiché molti hanno chiesto questo è come vorrei che l'app funzionasse:
- Un utente si iscrive
- Ha effettuato l'accesso
- Crea la sua prima collezione iside che può creare infiniti oggetti
- Gli articoli sono di vario tipo e ogni tipo necessita di dati diversi per essere salvato nel database e il tipo di elementi può essere aggiunto o modificato
Gli utenti possono creare altre raccolte ed elementi al suo interno.
Quindi abbiamo CRUD per le raccolte e gli oggetti al loro interno e ogni raccolta / oggetto è riferito a un utente specifico
Il problema principale con MySQL è che non ha uno schema flessibile, c'è un modo per risolverlo (una soluzione alternativa?)?
Pensando a NoSQL, l'unico dubbio che ho riguarda il join, ad esempio, data una certa raccolta, voglio recuperare i dati relativi all'utente con il campo id = user_id nella raccolta
EDIT: Idea per continuare a utilizzare MySQL
Creare un campo nella tabella "articoli" con impostazioni opzionali, ciascuna impostazione divisa per un | o un altro simbolo.
Quindi salverò da qualche parte una struttura di ogni elemento impostazioni facoltative, ad esempio il tipo di elemento "note" necessita di due impostazioni opzionali "color" e "strange_setting", quando ottengo i dati da MySQL dividerò il campo per le impostazioni opzionali in un array sapendo che il primo elemento dell'array è per "color" e così via.
Cosa ne pensi? ci sono problemi con quella soluzione? hai altre idee?