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 utente che richiede un database e io posso usare MySQL poiché la riga di ogni utente avrà gli stessi campi
- La "app" in cui gli utenti saranno in grado di creare, organizzare, modificare ... gli elementi nelle raccolte e condividerli con altri utenti
Ci saranno diversi tipi di articoli e ognuno avrà opzioni diverse, ad esempio potrei avere articoli "video" con le seguenti opzioni:
- id
- user_id
- collection_id
- titolo
- piattaforma (se presente)
- url (se incorporato)
- nome del file (se ospitato sulla mia app)
- dimensione del file (id ospitato sulla mia app)
e "mappa" elementi:
- id
- user_id
- 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 dato che ogni articolo potrebbe necessitare di opzioni diverse da un altro elemento
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 mi piacerebbe essere in grado di fare qualcosa di concreto in qualcosa come 1 mese.
Ho letto molto su MongoDB e NoSQL rispetto a RDMS e MySQL e dopo averlo provato devo dire che mi piace come funziona MongoDB: niente tabelle, niente file e i suoi documenti come JSON:
- 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 potrebbero rallentare considerevolmente la mia app?
Modifica: come funziona l'app
Dato che 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 oggetti infiniti
- Gli articoli sono di vario tipo e ogni tipo richiede dati diversi da salvare nel database e il tipo di elementi può essere aggiunto o modificato
Gli utenti possono creare altre collezioni e oggetti al suo interno.
Quindi abbiamo CRUD per le collezioni e gli elementi al loro interno e ogni raccolta / elemento è riferita a un utente specifico
Il problema principale di MySQL è che non ha uno schema flessibile, c'è un modo per risolverlo (una soluzione?)?
Pensando a NoSQL l'unico dubbio che ho riguarda il join, per esempio dato un certo tipo di raccolta voglio recuperare i dati relativi all'Utente con id = campo user_id nella collezione
EDIT: idea per continuare a utilizzare MySQL
Crea un campo nella tabella "items" con le impostazioni opzionali, ogni impostazione divisa da un | o un altro simbolo.
Quindi salverò da qualche parte una struttura di ogni elemento, le impostazioni opzionali, per esempio il tipo di elemento "note" necessita di due impostazioni opzionali "color" e "strange_setting", quando ottengo i dati da MySQL io dividerò il campo per facoltativo impostazioni in un array sapendo che il primo elemento nell'array è per "colore" e così via.
Che ne pensi? ci sono problemi con quella soluzione? hai altre idee?