Ich werde mein erstes echtes Projekt in Rails erstellen, das aus einer Web-App besteht, die aus drei Hauptteilen besteht:
- Der statische Teil, in dem keine Datenbank verwendet wird
- Der Benutzerregistrierungsteil, für den eine Datenbank erforderlich ist, und ich können MySQL verwenden, da die Zeilen jedes Benutzers dieselben Felder haben
- Die "App", in der Benutzer Elemente in Sammlungen erstellen, organisieren, bearbeiten und für andere Benutzer freigeben können
Es wird mehrere Elementtypen geben und jeder hat unterschiedliche Optionen, zum Beispiel kann ich "Video" -Elemente mit den folgenden Optionen haben:
- Ich würde
- Benutzeridentifikation
- collection_id
- Titel
- Plattform (falls eingebettet)
- URL (falls eingebettet)
- Dateiname (falls auf meiner App gehostet)
- Dateigröße (ID in meiner App gehostet)
und "Karten" -Elemente:
- Ich würde
- Benutzeridentifikation
- collection_id
- Titel
- Plattform (Google Maps, Bing Maps ...)
- Ort
- URL
- Kartengröße
Wie Sie können, während ich für Benutzer MySQL für Elemente verwenden kann, kann die Flexibilität von MongoDB nützlich sein, da jedes Element möglicherweise andere Optionen als ein anderes Element benötigt
Bisher habe ich immer PHP und MySQL verwendet (immer auf Shared Hosting für kleine Projekte) und Skalierbarkeit ist für mich ein völlig neues Wort.
Ich habe Zeit zu lernen, aber ich möchte in etwas wie 1 Monat etwas Konkretes tun können.
Ich habe viel über MongoDB und NoSQL im Vergleich zu RDMS und MySQL gelesen und nachdem ich es ausprobiert habe, muss ich sagen, dass mir die Funktionsweise von MongoDB gefällt: keine Tabellen, keine Zeilen und ihre Dokumente JSON wie folgt:
- Was würden Sie in meiner Situation empfehlen? Warum?
- Über Skalierbarkeit kann es Probleme mit MongoDB geben? Wenn ja, wann (in Bezug auf die DB-Größe) und können diese Probleme meine App erheblich verlangsamen?
Bearbeiten: wie die App funktioniert
Da viele gefragt haben, wie die App funktionieren soll:
- Ein Benutzer meldet sich an
- Er ist eingeloggt
- Er kreiert seine erste Sammlung iside, mit der er unendlich viele Gegenstände kreieren kann
- Es gibt verschiedene Arten von Elementen, und für jeden Typ müssen unterschiedliche Daten in der Datenbank gespeichert werden. Die Art der Elemente kann hinzugefügt oder geändert werden
Benutzer können andere Sammlungen und Elemente darin erstellen.
Wir haben also CRUD für Sammlungen und Elemente in ihnen und jede Sammlung / jedes Element wird an einen bestimmten Benutzer verwiesen
Das Hauptproblem bei MySQL ist, dass es kein flexibles Schema gibt. Gibt es eine Möglichkeit, dies zu lösen (eine Problemumgehung?).
Wenn ich an NoSQL denke, besteht der einzige Zweifel, den ich habe, in der Verknüpfung. Beispielsweise möchte ich bei einer bestimmten Spalte Daten abrufen, die sich auf den Benutzer mit dem Feld id = user_id in der Sammlung beziehen
EDIT: Idee, MySQL weiter zu verwenden
Erstellen Sie ein Feld in der Tabelle "Elemente" mit optionalen Einstellungen, wobei jede Einstellung durch ein | geteilt wird oder ein anderes Symbol.
Dann werde ich irgendwo eine Struktur der optionalen Einstellungen jedes Elements speichern, zum Beispiel benötigt der Elementtyp "Notizen" zwei optionale Einstellungen "Farbe" und "seltsame_Einstellung". Wenn ich die Daten von MySQL erhalte, teile ich das Feld für optionale Einstellungen in ein Array mit dem Wissen, dass das erste Element im Array für "Farbe" usw. steht.
Was denkst du? Gibt es ein Problem mit dieser Lösung? hast du andere ideen