Datenbankvorschlag für eine Community aus sozialen Netzwerken / Wissensdatenbanken?


12

Ich suche nach verschiedenen Datenbanktypen und DBMS für ein neues Projekt, das ich im Sommer starten möchte.

Ich habe Systeme in MySQL und PostgreSQL erstellt und möchte nun mein Wissen und meine Erfahrung in Datenbanken erweitern.

Mein Projekt wird eine Art soziales Netzwerk / Wissenssache sein. (Ich habe noch keinen Begriff dafür entwickelt).

Ich habe angeschaut:

  • Cassandra (verwenden Sie eine eigene Abfragesprache); Es scheint gut für funktionsreiche Inhalte zu sein und eine leistungsstarke Abfrageausführung zu liefern. Ich bin jedoch nicht besonders daran interessiert, da für die Arbeit eine Java-Umgebung erforderlich ist und ich es vorziehen würde, nichts mit Oracle zu tun zu haben.
  • MongoDB (noSQL-Typ von DBMS); Hervorragende Skalierbarkeit Sie verlieren jedoch alle Funktionen, die bereits in der bewährten SQL-Sprache verfügbar sind, wie z. B. Abfragen von Geschäftsinformationen.

Anforderungen an das System:

  • Daten Text, Daten, Zeiten, xml, kleine Ints, Klecks,
  • Struktur / Verhalten : normalisiert 3NF, nicht in Echtzeit, relational, skalierbar, robust
  • Umgebung: Unix / Linux, kein JAVA !, läuft vorzugsweise auf C

Ich habe mich gefragt, ob Sie mich auf andere Datenbanksysteme verweisen könnten, die ich untersuchen sollte.

Ich habe mir auch objektrelationale Datenbanken angesehen. Ich finde die Idee, dass sie mit PHP-Objekten (PDOs) arbeiten, sehr gut, aber ihre Leistung scheint ein bisschen schlecht zu sein.

Angesichts der Tatsache, dass es hier DBAs gibt, wäre jedes Feedback zu diesen Systemen, die Sie betrieben haben, dankbar.

Vielen Dank


3
Wenn Sie 3nf normalisieren möchten, müssen Sie einen relationalen Speicher erstellen. Zeitraum.
JNK

2
Ich würde Java nicht anklopfen, nur weil es "Oracle" ist. Verwenden Sie das richtige Werkzeug für den Job. Wenn Java das beste Tool ist, würde ich es verwenden. Wenn C der richtige Job ist, verwenden Sie ihn. Konzentrieren Sie sich auf die Vor- und Nachteile der einzelnen Tools. Treffen Sie eine fundierte Entscheidung (wie bei der DB), anstatt sich auf das Gefühl zu stützen.
Chris Aldrich

Antworten:


4

Ihre abstrakten Anforderungen rufen "PostgreSQL" nach mir. Ich denke jedoch, dass es sich lohnt, auf dem Laufenden zu bleiben, was die Bourgeoisie vorhat.

Gratis Gegenstände

  • CouchDB - eine der ersten NoSQL-Datenbanken, leistungsstarkes Map / Reduce-Abfragesystem, hochverteilt und fehlertolerant. Einer der besseren NoSQL-Konkurrenten.
  • Hyperdex - sehr neue, verteilte Hash-Tabelle mit Suchfunktionen.
  • Riak - verteilte Hash-Tabelle, die einen gewissen Respekt verdient.

Seltsames freies Zeug

  • Metakit - mehr eine eingebettete Datenbank wie SQLite, aber nicht SQL-basiert, also prozeduraler.
  • FramerD - ähnlich wie eine klassische "Netzwerk" -Datenbank, sehr zeigerorientiert . Vielleicht tot?
  • Magma - Smalltalk OODBMS. Cool, aber nicht gut dokumentiert.

Unfreie Sachen

  • AllegroGraph - RDF (Graph) Datenbank, unterstützt SPARQL. Lisp-Geschmack.
  • Caché - eine hybride relationale / OO-Datenbank, die ursprünglich auf MUMPS (IIRC) basiert.
  • Objektivität - Eine der letzten wirklich großen OODBs. Sehr leistungsstark, beeindruckend und teuer.
  • VoltDB - Hoch skalierbare, meist relationale Datenbank. Unterstützt "die meisten" SQL. Sehr neu. Ich denke, sie haben auch eine Community-Version.

Fazit

Ich habe keines dieser Dinge ausgiebig benutzt. Ich habe mit den meisten ein bisschen gespielt und bin immer mit PostgreSQL zurückgekehrt. Wenn Sie sich Ihre Anforderungen ansehen, ist die einzige PostgreSQL-Lösung, die nicht sofort verfügbar ist, die Skalierbarkeit. Andererseits ist es für meine Zwecke viel einfacher, Hardware im Wert von 4000 US-Dollar auf einen einzelnen dedizierten Datenbankcomputer zu werfen, als Cloud-Knoten oder Low-End-Computer im Wert von 4000 US-Dollar auf dieses Problem zu werfen. Und es gibt Möglichkeiten, mit PostgreSQL eine Skalierbarkeit zu erzielen, beispielsweise mit EnterpriseDB .

Es macht großen Spaß, mit diesen Dingen nebenbei herumzuspielen, aber wenn es darum geht, wertvolle, nicht reproduzierbare Produktionsdaten in etwas zu stecken, treten eine Reihe langweiliger Attribute wie Zuverlässigkeit, Stabilität und langfristige Rentabilität in den Vordergrund.

Gedankenexperiment für Sie

Bedenken Sie. Stellen Sie sich vor, Sie sind Mark Zuckerberg und müssen entweder Ihre Codebasis oder Ihre Daten preisgeben. Sie können Ihr gesamtes Entwicklungspersonal behalten, müssen aber entweder Ihren gesamten Code aufgeben - jede Zeile, sogar alle Entwicklererinnerungen darüber, wie sie alles implementiert haben, sind verschwunden -, aber Sie können alle Ihre Benutzerkonten und alle Ihre hochgeladenen Benutzer behalten Daten und all das, oder Sie können alle Daten aufgeben. Behalten Sie alle Strukturen und Server sowie die Konfiguration und das Setup bei, verlieren Sie jedoch jede Zeile in jeder Tabelle in jeder Datenbank.

Es sollte offensichtlich sein, dass es schlimmer wäre, die Daten zu verlieren. Warum würden alle Ihre Benutzer all diese Daten neu generieren? Denken Sie an all die verlorenen Marketingdaten, mit denen Facebook tatsächlich ihr Geld verdient. Und es gibt Unmengen von Unternehmern, die sich die Gelegenheit zunutze machen, Menschen dazu zu bringen, ihren Facebook-Klon zu verwenden. Jetzt würden all jene nicht mehr autorisierten Ex-Facebook-Nutzer über Alternativen nachdenken. Wenn sie andererseits die Codebasis verlieren, können sie sie möglicherweise sogar noch besser als jetzt wiederherstellen, aber sie können in sehr kurzer Zeit etwas online haben. Verdammt - sie könnten wahrscheinlich kaufenDie Facebook-Klon-Codebasis einer anderen Person lädt sie mit den tatsächlichen Daten, aber Sie können ihre Daten nicht einfach kopieren. Wenn Facebook immer noch alle wichtigen Daten auf seinen Servern hat, ist der Anreiz, das Unternehmen zu verlassen, viel geringer. Immer noch schlecht, aber noch viel weniger. Überraschenderweise weniger.

Die Ironie ist, dass es viel einfacher ist, alle Ihre Daten bei einem verrückten Unfall zu verlieren, als Ihren gesamten Code zu verlieren. Für die meisten Internet - Unternehmen, aber die Daten sind das Unternehmen, es ist Ihr wertvollstes Kapital. Und dies ist ein wichtiger Grund, eine traditionelle, bewährte, altmodische, nicht-sexuelle relationale Datenbank zu verwenden.


Zusammenfassung des langen Kommentarthreads, der hier gelöscht wurde: "Es ist unfair zu implizieren, dass NOSQL-Speicher die Wahrscheinlichkeit erhöhen, dass Sie Daten verlieren."
Jack sagt, versuchen Sie topanswers.xyz

Was ich sage, hat mit dem Alter und der weit verbreiteten Verwendung zu tun, nicht mit dem Design der Speicher-Engine.
Daniel Lyons

6

Bedenken Sie auch, dass es keinen Grund gibt, warum Sie eine relationale Datenbank für einige Dinge und die nosql-Datenbank für andere Dinge nicht verwenden können.


0

Apropos nosql, ich habe nur 1 Sache über die Facebook-Referenz hinzuzufügen:

Wenn Sie eine sehr große Skalierung planen, empfehle ich, dass Sie eine systemadministratorfreundliche und eine entwicklerfreundliche DB-Engine verwenden.

Beenden Sie die entwicklerfreundliche und superschnelle MongoDB, die nicht geografisch verteilt skaliert werden kann und keine Möglichkeit zum effizienten und einfachen Sichern bietet. Obwohl wir hier MongoDB verwenden, scheint es, dass Riak oder CouchDB in den Spezifikationen für Sysadmins besser aussehen (ich habe keine Erfahrung mit Riak oder CouchDB)


2
Wenn Sie sich für eine große Skalierung entscheiden, liegt dies daran, dass Sie bereits von klein auf klein und von klein auf klein skaliert haben und dabei einige Dinge gelernt haben, die Ihnen helfen, die richtigen Entscheidungen zu treffen. Wenn Sie zum Skalieren bereit sind, können Sie sich die Ingenieure leisten, die wissen, wie man skaliert.
Jcolebrand
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.