Frage

Im Moment ist ich die Entwicklung des Prototyps einer Web-Anwendung, der Aggregate große Anzahl von Texteinträgen aus einer großen Anzahl von Benutzern. Diese Daten müssen häufig zurück und häufig aktualisiert angezeigt werden. Im Moment speichere ich den Inhalt in einer MySQL-Datenbank und verwende NHibernate ORM-Schicht mit der DB zu interagieren. Ich habe eine Tabelle für Benutzer, Rollen, Vorlagen, Tags, Benachrichtigungen und usw. Ich mag diese Lösung definiert bekam, weil es gut funktioniert und mein Code sieht schön und gesund, aber ich bin auch besorgt darüber, wie MySQL einmal die Größe durchführen wird unserer Datenbank erreicht eine beträchtliche Anzahl. Ich glaube, dass es kämpfen können Operationen verbinden schnell genug durchführen.

Das hat mich zum Nachdenken über nicht-relationales Datenbanksystem wie MongoDB , CouchDB , Cassandra oder Hadoop . Leider habe ich keine Erfahrung mit entweder. Ich habe einige gute Kritiken auf MongoDB lesen und es sieht interessant aus. Ich bin glücklich, die Zeit zu verbringen und lernen, wenn man die Art und Weise zu sein, stellt sich heraus zu gehen. Ich würde schätzt viel irgendwelche ein Opfer Punkte oder Punkte zu berücksichtigen, wenn sie mit keiner relationalen DBMS gehen?

War es hilfreich?

Lösung

Die anderen Antworten hier konzentrierten sich hauptsächlich auf die technischen Aspekte, aber ich denke, es gibt wichtige Punkte gemacht werden, dass der Fokus auf der Startup-Unternehmen Aspekt der Dinge:

  • Ihre Verfügbarkeit von Talent. MySQL ist sehr verbreitet, und Sie werden wahrscheinlich feststellen, es einfacher (und was noch wichtiger ist, billiger) Entwickler für sie zu finden, die im Vergleich zu den verfeinerten Datenbanksystemen. Dieses größere Entwicklergemeinde werden auch weitere Tutorials bedeuten, eine aktivere Support-Community, etc.
  • Einfache Entwicklung. Auch, weil MySQL so üblich ist, werden Sie finden es die db der Wahl für sehr viele Systeme / Dienstleistungen ist. Diese Gemeinsamkeit jede externe Integration ein wenig leichter machen kann.
  • Sie bereiten sich auf eine Situation, die es nie geben kann und ist überschaubar, wenn es funktioniert. Nur sehr wenige Unternehmen (vergiss Start-ups) nahe an die MySQL-Grenzen, und bei allem Respekt (und ich bin nur raten hier); die Wahrscheinlichkeit, dass Ihr Start jemals die Art von Daten getroffen Durchsatz einen richtig strukturiert, gut resourced MySQL db zu lähmen ist fast Null.

Im Grunde nicht verbringen Sie Ihre Zeit (== Geld) sich Gedanken darüber, welche db Gebrauch, wie MySQL umgehen kann viel von Daten wird gut bewährt und gut unterstützt.

auf die technische Seite der Dinge Gehen wir zurück ... Etwas, das ein muss far größeren Einfluss auf die Geschwindigkeit Ihrer Anwendung als Wahl von db, ist, wie effizient Daten sein können gecached . Eine effektive Cache kann dramatische Auswirkungen auf db Last zu reduzieren und die allgemeine responsivness einer App zu beschleunigen. Ich würde Ihre Zeit untersuchen Caching-Lösungen ausgeben und dafür, dass Sie Ihre App so entwickeln, dass sie die bestmögliche Nutzung dieser Lösungen machen kann.

FYI, meine Caching-Lösung der Wahl ist Memcached .

Andere Tipps

Bisher hat niemand auf der relationalen Seite PostgreSQL als Alternative zu MySQL erwähnt. Beachten Sie, dass MySQL Libs sind reine GPL, LGPL nicht. Das könnte Sie zwingen, Ihren Code freigeben, wenn Sie mit ihnen verbinden, obwohl vielleicht jemand mit mehr Recht Erfahrung, die man besser die Auswirkungen erzählen konnte. Auf der anderen Seite, zu einer MySQL-Bibliothek verknüpft ist nicht das gleiche, dass der Server und Ausgabe-Befehle nur anschließen, können Sie das mit Closed-Source tun können.

PostreSQL ist in der Regel der beste kostenlose Ersatz von Oracle und die BSD-Lizenz soll mehr Geschäft freundlich sein.

Da Sie eine nicht relationale Datenbank bevorzugen, sollten Sie, dass der Übergang noch dramatischer sein. Wenn Sie jemals Ihre Datenbank benötigen anpassen, sollten Sie auch den Lizenztyp Faktor berücksichtigen.

Es gibt drei Dinge, die wirklich einen großen Einfluss haben, auf die man die beste Datenbank Wahl ist und Sie nicht erwähnen:

  1. Die Größe der Daten oder wenn Sie Dateien in Ihrer Datenbank zu speichern.
  2. Eine große Anzahl von liest und nur sehr wenige (auch eingeschränkt) schreibt. In diesem Fall mehr als eine Datenbank benötigen Sie ein Verzeichnis wie LDAP
  3. Die Bedeutung der Datenverteilung und / oder Replikation. Die meisten relationalen Datenbanken können mehr oder weniger gut repliziert, sondern wegen ihres Konzepts / Design keine Datenverteilung als auch handhaben ... aber Sie werden so viele Daten verarbeiten, die nicht in einen Server paßt oder Zugriffsrechte haben, die getrennte besondere Bedürfnisse / zusätzliche Server?

Allerdings werden die meisten Menschen für eine nicht relationale Datenbank gehen, nur weil sie nicht wie das Lernen SQL

Was denken Sie, ist eine erhebliche Menge an Daten? MySQL , und im Grunde der meisten relationale Datenbank-Engines, verarbeiten kann ziemlich große Menge an Daten, mit dem richtigen Indizes und vernünftiger Datenbank Schema.

Warum versuchen Sie nicht, wie MySQL verhält sie mit größerer Datenmenge in Ihrem Setup? Machen Sie einige Skripte, die realistischen Daten zu MySQL Testdatenbank zu generieren und und erzeugt eine gewisse Last auf dem System und sehen, ob es schnell genug ist.

Nur wenn es nicht schnell genug ist, zum ersten Mal startet unter Berücksichtigung die Datenbank zu optimieren und auf verschiedenen Datenbank-Engine zu ändern.

Seien Sie vorsichtig mit NHibernate , ist es einfach, eine Lösung zu machen, die schön und leicht zu Code mit, aber schlechte Leistung mit großer Datenmenge hat. Zum Beispiel, ob faul oder eifrig Abruf verwenden mit den Verbänden sorgfältig betrachtet werden sollen. Damit meine ich nicht, dass Sie nicht NHibernate verwenden sollte, aber stellen Sie sicher, dass Sie verstehen, wie NHibernate funktioniert, zum Beispiel, was „n + 1 wählt“ -Problem Mittel.

Messen, nicht davon ausgehen.

Relationale Datenbanken und NoSQL-Datenbanken können sowohl Maßstab enorm, wenn die Anwendung geschrieben wird rechts in jedem Fall und wenn das System läuft es auf richtig abgestimmt ist.

Also, wenn Sie einen Anwendungsfall für NoSQL, Code zu. Oder wenn Sie sich wohler mit relationalen, Code zu dem. Dann messen, wie gut er ausführt und wie es skaliert, und wenn es in Ordnung, mit ihm gehen, wenn nicht, analysieren, warum.

Erst wenn Sie Ihre Leistung Problem verstehen, sollten Sie für exotische Technologie gehen auf der Suche, es sei denn, Sie sind bequem mit dieser Technologie oder wollen es aus einem anderen Grund versuchen.

Ich würde vorschlagen, dass Sie jede db ausprobieren und das eine auswählen, die es am einfachsten macht Ihre Anwendung zu entwickeln. Zur http://try.mongodb.org MongoDB mit einem einfachen Tutorial zu versuchen. Sorgen Sie sich nicht so viel über die Geschwindigkeit seit Anfang Entwickler Zeit wertvoller als die CPU-Zeit ist.

Ich weiß, dass viele MongoDB Benutzer in der Lage gewesen, ihre ORM und Schicht ihrer Caching-Graben. Mongo Datenmodell ist viel näher an die Objekte mit denen Sie arbeiten als relationale Tabellen, so können Sie in der Regel direkt nur Ihre Objekte speichern, wie sie ist, auch wenn sie Listen von verschachtelten Objekten enthalten, wie zum Beispiel einem Blog-Post mit Kommentaren. Auch, weil Mongo schnell genug für die meisten Websites ist, wie sie ist, können Sie vermeiden, die Komplexität des Caching zu tun und in der Regel einen Echtzeit-Standort liefern. Zum Beispiel Wordnik.com 250.000 berichtet liest / s und 100.000 Einsätze / sec mit einem 1,2 TB / 5000000000 Objekt DB.

Es gibt ein paar Möglichkeiten, um MongoDB von Net zu verbinden, aber ich habe nicht genug Erfahrung mit dieser Plattform zu wissen, welche am besten ist:

Disclaimer:. Ich arbeite für 10gen auf MongoDB so bin ich ein bisschen voreingenommen

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