Frage

Ich bin in der Mitte eine neue App zu bauen, die sehr ähnliche Features wie Facebook haben und obwohl offensichtlich wont es jemals mit Größen wie 400.000.000 Millionen Nutzer zu tun haben wird es noch durch eine wesentliche Nutzerbasis verwendet werden, und die meisten sie wird verlangen, es läuft sehr sehr schnell.

Ich habe umfassende Erfahrung mit MySQL, sondern ein sozialen App bietet Komplexitäten, die MySQL auch nicht gut geeignet ist. Ich weiß, dass Facebook, Twitter usw. haben für viele ihrer Daten zu Cassandra bewegt, aber ich bin nicht sicher, wie weit mit ihm zu gehen.

Zum Beispiel würden Sie speichern Dinge wie Benutzerdaten - Benutzernamen, Passwörter, etc. Adressen in Kassandra? Würden Sie speichern E-Mails, Kommentare, Status-Updates usw. in Cassandra? Ich habe auch eine Menge, dass so etwas wie Neo4j ist viel besser lesen Sie die Freund-Beziehungen für die Darstellung von sozialen Anwendungen verwendet, da es eine Graph-Datenbank ist. Ich bin gerade erst nach unten Start der NoSQL Route so wird jede Führung sehr geschätzt.

Würde jemand in der Lage sein, mich auf das raten? Ich hoffe, ich bin nicht zu allgemein zu sein!

War es hilfreich?

Lösung

  

Zum Beispiel würden Sie speichern Dinge wie Benutzerdaten - Benutzernamen, Passwörter, etc. Adressen in Kassandra?

Nein, da es garantiert nicht, Konsistenz. Cassandra ist schließlich konsistent . Sicherlich sollte es keine Parallelität auf ein bestimmten Daten des Benutzerkontos sein, aber ich würde nicht darauf wetten will. Sie werden vielleicht nicht brauchen Konsistenz auf die Volltextsuche, Ihre Nachricht Posteingang usw., aber Sie wollen Konsistenz in alles, was sicherheitsrelevanten ist.

  

Ich habe auch eine Menge, dass so etwas wie Neo4j viel besser ist es, die Freund-Beziehungen für die Darstellung von sozialen Anwendungen verwendet, da es eine Graph-Datenbank ist.

Ich bin ein großer Fan des richtigen Werkzeugs für den richtigen Job. Ich habe nicht Neo4j verwendet, aber ich habe db4o benutze (was eine Objektdatenbank ist) und finde es sehr hilfreich. Es macht Entwicklung einfacher, ein Werkzeug zu benutzen, dass Ihre Bedürfnisse nativ unterstützt. Da Sie Graphen und die Arbeit mit Graphen in SQL ist ein Schmerz benötigen, würde ich empfehlen, einen Blick darauf zu geben und zu bewerten, ob es Ihren spezifischen Bedürfnissen entspricht.

Mischen Datenbanken klingen wie eine gute Idee zu mir, solange der Wahl ist natürlich (die entsprechende Datenbank ist hilfreich, mit den spezifischen Jobs, eine Graph-Datenbanken für Graphen, eine Tabelle für Tabellen, ACID-Datenbanken für alles, dass Bedürfnisse Transaktionssicherheit , etc...).

Andere Tipps

Ich würde vorschlagen, einige Tests mit MySQL und mit Cassandra tun. Wenn wir die Wahl zwischen PostgreSQL und MongoDB in einem meiner Arbeit zu machen hatte, verglichen wir Abfragezeit auf Millionen von Datensätzen in den beiden und fand heraus, dass mit über 10 Millionen Datensätze Postgres uns mit angemessenen Antwortzeiten bieten würde.

Wir wussten, dass wir nicht auf diese Anzahl von Aufzeichnungen mindestens ein paar Jahren bekommen würde, und wir hatten Erfahrung mit Postgres (während MongoDB nicht sehr zu der Zeit reifen), so dass wir mit Postgres ging.

Mein Punkt ist, dass Sie wahrscheinlich bei MySQL-Benchmarks aussehen können, tun Tests einige Leistung selbst, schätzen die Größe des Datensatzes und wie es geht, zu wachsen, und machen eine informierte Entscheidung auf diese Weise.

Wie zum Mischen relationale und nicht-relationale Datenbanken, es ist etwas, das wir auch in Betracht gezogen, aber entschieden, dass es zu viel Aufwand wäre, als dass zwei Arten von Software bedeuten würde beibehalten, und das Schreiben eines ziemlich viel Glue-Code die Daten von beiden zu erhalten. Ich denke, Cassandra durchaus in der Lage wäre, alle Ihre Daten zu speichern.

Facebook hat nicht Bewegung zu Cassandra, schufen sie es. :) Mein Wissen NoSQL DBMSes benötigt keine oder sogar erwähnen (danke für die Korrektur mnemosyn nutzt Facebook Oracle und Cassandra) nebeneinander lief mit einer relationalen Datenbank. Diese ist Gegenbeispiel (Benutzerinformationen in einer nosql DB speichern).

Ich würde sagen, dass, wenn Cassandra gut genug für Facebook ist, ist es wahrscheinlich gut genug für Ihr Projekt. Es ist vielleicht nicht die Persistenzlogik abstrahieren verletzt, um zu versuchen, so dass Sie die Möglichkeit, Schalter auf etwas anderes haben, wenn es unbedingt dazu kommt.

Disclaimer: Ich habe nicht (? Noch) hatte keine praktische Erfahrung mit NoSQL-Datenbanken. Was weiß ich aus der Lektüre über sie kommt

Cassandra bietet eine schöne verteilte Lösung, und wahrscheinlich besser für eine Facebook-ähnliche Plattform als MySQL (wenn es maßstab benötigen). Aber Cassandra ist nicht für die Daten Beziehungen geeignet, wo Sie eine many-to-many-Beziehung Herausforderung haben werden. Ein Graph-Datenbank Cassandra gebunden würde sowohl die Schüttvolumen Bedürfnisse bieten, sowie eine sehr schnelle Beziehung Abfrage-Fähigkeit. Wir arbeiten an etwas, das die beiden Technologien kombiniert, und immer in der Art der Anforderungen interessierten Ihre Plattform präsentieren würde. Wenn Sie Fragen haben, wie bestimmte Daten Fragen behandeln ich sie hören würde gerne, vielleicht können wir helfen, ihn herauszufinden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top