Je vais construire mon premier vrai projet dans Rails qui consiste en une application web composée de 3 parties principales:
- La partie statique où aucune base de données n'est utilisée
- La partie Enregistrement d'utilisateur qui nécessitera une base de données et je peux utiliser MySQL car la ligne de chaque utilisateur aura les mêmes champs
- L '"App" où les utilisateurs pourront créer, organiser, éditer ... des éléments dans des collections et les partager avec d'autres utilisateurs
Il y aura plusieurs types d'élément et chacun aura différentes options, par exemple je peux avoir des éléments "vidéo" avec les options suivantes:
- id
- identifiant d'utilisateur
- collection_id
- Titre
- plate-forme (si intégrée)
- url (si incorporé)
- nom de fichier (si hébergé sur mon application)
- taille du fichier (id hébergé sur mon application)
et "éléments de la carte":
- id
- identifiant d'utilisateur
- collection_id
- Titre
- plate-forme (google maps, bing maps ...)
- emplacement
- url
- taille de la carte
Comme vous pouvez le faire pour les utilisateurs, je peux utiliser MySQL pour les éléments, la flexibilité de MongoDB peut être utile car chaque élément peut avoir besoin d'options différentes puis d'un autre
Jusqu'à présent, j'ai toujours utilisé PHP et MySQL (toujours sur l'hébergement partagé pour les petits projets) et l'évolutivité est un mot totalement nouveau pour moi.
J'ai le temps d'apprendre mais j'aimerais pouvoir faire quelque chose de concret en quelque chose comme 1 mois.
J'ai beaucoup lu sur MongoDB et NoSQL vs RDMS et MySQL et après l'avoir essayé, je dois dire que j'aime le fonctionnement de MongoDB: pas de tables, pas de lignes et ses documents JSON comme ça:
- Dans ma situation, que recommanderiez-vous? Pourquoi?
- À propos de l'évolutivité, il peut y avoir des problèmes avec MongoDB? si oui quand (en termes de taille de base de données) et ces problèmes peuvent-ils ralentir considérablement mon application?
Modifier: comment l'application fonctionnera
Étant donné que beaucoup ont demandé, voici comment j'aimerais que l'application fonctionne:
- Un utilisateur s'inscrit
- Il est connecté
- Il crée sa première collection à partir de laquelle il peut créer des objets infinis
- Les éléments sont de différents types et chaque type nécessite des données différentes pour être enregistré dans la base de données et le type d'éléments peut être ajouté ou modifié
Les utilisateurs peuvent créer d'autres collections et éléments à l'intérieur.
Nous avons donc CRUD pour les collections et les articles à l'intérieur d'eux et chaque collection / article est référé à un utilisateur spécifique
Le principal problème avec MySQL est qu'il n'a pas de schéma flexible, il existe un moyen de résoudre ce problème (une solution de contournement?)?
En pensant à NoSQL, le seul doute que j'ai est sur la jointure, par exemple, étant donné une certaine collection, je veux récupérer les données liées au champ User with id = user_id dans la collection
EDIT: idée de continuer à utiliser MySQL
Créez un champ dans le tableau "articles" avec des paramètres facultatifs, chaque paramètre étant divisé par un | ou un autre symbole.
Ensuite, je vais enregistrer quelque part la structure de chaque élément des paramètres facultatifs, par exemple le type d'élément "notes" nécessite deux paramètres facultatifs "couleur" et "étrange_setting", lorsque j'obtiendrai les données de MySQL, je diviserai le champ des paramètres facultatifs en un tableau sachant que le premier élément du tableau est pour "couleur" et ainsi de suite.
Qu'est-ce que tu penses? il y a un problème avec cette solution? avez-vous d'autres idées?