Frage

Neben dem Google / BigTable Szenario, wenn Sie sollten nicht eine relationale Datenbank verwenden? Warum nicht, und was sollten Sie verwenden? (Hast du gelernt, 'auf die harte Tour'?)

War es hilfreich?

Lösung

Nach meiner Erfahrung sollte man nicht eine relationale Datenbank verwenden, wenn eines dieser Kriterien erfüllt sind:

  • Ihre Daten werden als Hierarchie oder ein Graphen (Netz) von beliebiger Tiefe strukturiert,
  • die typischen Zugriffsmuster betonen über Schreiben, Lesen oder
  • gibt es keine Notwendigkeit für Ad-hoc-Abfragen.

Deep Hierarchien und Grafiken übersetzen nicht gut auf relationale Tabellen. Auch mit Hilfe von proprietären Erweiterungen wie Oracle CONNECT BY, Bäume jagen ist ein mächtiger Schmerz mit SQL.

Relationale Datenbanken fügen Sie eine Menge Aufwand für einfachen Lesezugriff. Transactional auf Integrität und sind leistungsstark, aber viel des Guten für einige Anwendungen. Also für die Lese meist Anwendungen, eine Datei Metapher gut genug ist.

Schließlich Sie einfach nicht brauchen eine relationale Datenbank mit ausgewachsener Abfragesprache, wenn es keine unerwarteten Anfragen zu erwarten sind. Wenn es keine Klagen Fragen wie sind „wie viele 5% -discounted blau-Widgets haben wir verkaufen an der Ostküste in nach Verkäufer gruppiert?“, Und es wird nie sein, dann sind Sie, mein Herr, frei von DB leben können.

Andere Tipps

Das relationale Datenbank Paradigma macht einige Annahmen über die Nutzung von Daten.

  • Eine Beziehung besteht aus einer ungeordneten Menge von Zeilen.
  • Alle Zeilen in einer Beziehung haben den gleichen Satz von Spalten.
  • Jede Spalte hat einen festen Namen und Datentyp und semantische Bedeutung in allen Reihen.
  • Zeilen in einer Beziehung sind, durch eindeutige Werte in Primärschlüsselspalte (n).
  • identifiziert
  • etc.

Diese Annahmen stützen Einfachheit und Struktur, auf Kosten einer gewissen Flexibilität. Nicht alle Datenverwaltungsaufgaben passen in diese Art von Struktur. Organisationen, die mit komplexen Attributen oder variable Attributen nicht, zum Beispiel. Wenn Sie Flexibilität in Bereichen benötigen, wo eine relationale Datenbank-Lösung nicht unterstützt, müssen Sie eine andere Art von Lösung verwenden.

Es gibt andere Lösungen für Daten mit unterschiedlichen Anforderungen zu verwalten. Semantic Web-Technologie, zum Beispiel, ermöglicht es jedes Unternehmen seine eigenen Attribute zu definieren und sein selbstbeschreibende, durch Metadaten zu behandeln, als wie Datenattribute. Dies ist flexibler als die Struktur, die durch eine relationale Datenbank auferlegt, sondern dass Flexibilität ist zwar mit Kosten seines eigenen.

Insgesamt sollten Sie das richtige Werkzeug für jeden Job verwenden.

Siehe auch meine andere Antwort auf „ Die Next-Gen-Datenbanken . „

Es gibt drei Hauptdatenmodelle (C.J.Date, E.F.Codd) und ich bin das Hinzufügen einer flachen Datei folgt aus:

  • flat-Datei (en) (Struktur variiert - von ‚dumm‘ flat Text-Dateien auf Grammatiken konforme, die mit cleveren Tools gekoppelt tun sehr kluge Dinge, denken Compiler und was sie tun können, schmale Anwendung in neuen Dingen Modellierung)
  • hierarchischen (Bäume, verschachtelte Gruppen - Beispiele: xml und andere Markup-Sprachen, die Registrierung, Organisations Diagramme, etc., alles modelliert werden können, aber Integritätsregeln sind nicht einfach auszudrücken und Retrieval ist schwer automatisch zu optimieren, ist einige Abruf schnell und einige sehr langsam)
  • Netzwerk (Netzwerke, Graphen - Beispiele: Navigationsdatenbanken, Hyperlinks, Semantic Web, wieder fast alles kann aber die automatische Optimierung des Abrufs modelliert wird ein Problem ist)
  • relationalen (Prädikatenlogik erster Stufe - Beispiel: relationale Datenbanken, automatische Optimierung des Abrufs)

Sowohl hierarchische und Netzwerk können in relationalen und relationalen dargestellt werden kann, in den beiden anderen ausgedrückt werden.

Der Grund, dass gilt als relationale ‚besser‘ ist die deklarative Natur und Standardisierung nicht nur von der Datenabruf Sprache, sondern auch auf der Datendefinitionssprache, einschließlich der starken Integrität deklarativen Daten, gesichert mit stabil , skalierbare Multi-User-Management-System.

Vorteile kommen zu einem Preis, der die meisten Projekte ein gutes Verhältnis für Systeme (Multi-Anwendung) zu sein, die in einem von Langzeitdaten speichern, dass in absehbarer Zeit nutzbar sein.

Wenn Sie bauen kein System, sondern eine einzige Anwendung, vielleicht für einen einzelnen Benutzer, und Sie sind ziemlich sicher, dass Sie nicht mehrere Anwendungen Ihre Daten verwenden, noch mehrere Benutzer wollen, jederzeit bald dann werden Sie wahrscheinlich findet schnelle Ansätze.

Auch wenn Sie nicht wissen, welche Art von Daten, die Sie speichern wollen, und wie es dann relationales Modell Stärken verschwenden darauf zu modellieren.

oder wenn Sie einfach über die Integrität Ihrer Daten kümmern sich nicht so viel (was in Ordnung sein kann).

Alle Datenstrukturen für eine bestimmte Art von Anwendung optimiert sind, nur relational, wenn sie richtig modelliert versucht, die ‚Realität‘ in semantisch unvoreingenommen zu repräsentieren. Menschen, die in der Regel schlechte Erfahrungen mit relationalen Datenbanken hatten nicht erkennen, dass ihre Erfahrung viel schlechter mit anderen Arten von Datenmodellen gewesen wäre. Horrible Implementierungen sind möglich, und vor allem mit relationalen Datenbanken, in denen es relativ einfach ist, komplexe Modelle zu bauen, könnte man mit ganz einem Monster an den Händen landen. Ich habe immer noch besser fühlen, wenn ich versuche, das gleiche Monster in xml vorstellen.

Ein Beispiel dafür, wie gut relationalen Modell ist, IMO, ist Verhältnis von Komplexität vs Kürze der Fragen, die Sie, dass SQL einbezieht finden.

Ich schlage vor, Sie die Hohe Skalierbarkeit Blog , die dieses Thema auf einer täglichen Basis fast diskutiert und hat über viele Artikel Projekte, die Hash-Werte verteilt chose usw. über RDMBS.

Die schnelle (aber sehr unvollständige Antwort) ist, dass nicht alle Daten auch auf Tabellen in effizienter Art und Weise übersetzt. Zum Beispiel, wenn Sie Ihre Daten im Wesentlichen ein großes Wörterbuch sind, gibt es wahrscheinlich viel schnelle Alternativen, die nur alte RDBMS. Having said that, es vor allem eine Frage der Leistung, und wenn die Leistung in einem Projekt nicht eine große Sorge ist, und Stabilität, Konsistenz und Zuverlässigkeit, zum Beispiel sind, dann nicht viel Sinn, ich sehe in Eintauchen in diese Technologien als RDBMS ist ein viel reifes und gut entwickelte Schema, mit Unterstützung in allen Sprachen und Plattformen und eine riesiges Angebot an Lösungen zur Auswahl.

Vor fünfzehn Jahren war ich auf einer Kreditrisikosystem arbeiten (im Grunde ein großer Baum Walking-System). Wir waren mit Sybase auf HP-UX und Solaris und performnce uns töten. Wir mieteten in Berater direkt von Sybase, der sagte, es nicht getan werden könnte. Dann wechselten wir zu einer OO-Datenbank (Object Store in diesem Fall) und bekamen einen über eine 100x Leistungssteigerung (und der Code war etwa 100x einfacher zu schreiben)

Aber solche Situationen sind sehr selten -. Eine relationale Datenbank eine gute erste Wahl ist

Wenn Sie Schema eine Menge variiert werden Sie eine harte Zeit mit relationalen Datenbanken haben. Dies ist, wo XML-Datenbanken oder Schlüssel-Wert-Paar Datenbanken am besten funktionieren. oder Sie können IBM DB2 verwenden und sowohl relationale Daten und XML von einem einzigen Datenbank-Engine verwalteten Daten.

Etwa 7-8 Jahre arbeitete ich auf einer Website, die in der Popularität über unsere ursprünglichen Erwartungen gewachsen und es hat uns in Schwierigkeiten Performance-weise. Da wir alle relativ unerfahren in basierten Projekten Bahn waren posierte sie eine bedeutende Belastung für uns über das, was über die übliche Datenbank Trennung auf separate Server, Load-Balancing usw. zu tun

Ein Tag hat mich ziemlich einfach etwas einfiel. Da Website auf Benutzer basiert, wurden ihre Profile in einer Datenbanktabelle gespeichert die übliche Art, wie jemand es tun würde - Benutzer-ID, viele Informationen Variablen und Sachen wie, dass - die als Benutzer Profilseite, die anderen Benutzer nachschauen auftauchen würde könnten . Ich habe all diese Daten in eine einfache HTML-Datei geleert, bereits als Benutzer Profilseite vorbereitet und bekam einen deutlichen Schub - im Grunde einen Cache. Ich machte sogar ein System, dass, wenn der Benutzer sein Profil bearbeitet Info, wäre es original HTML-Datei zu analysieren, ist es für die Bearbeitung setzen, und dann html zurück auf das Dateisystem spülen - bekam noch mehr Schub.

Ich habe etwas simillar mit Nachrichten Benutzer miteinander gesendet. Im Grunde genommen, wo ich könnte ein System mache eine Datenbank ganz umgehen, ein INSERT oder UPDATE zu vermeiden, habe ich einen deutlichen Schub. Es mag wie ein gesunder Menschenverstand klingen, aber es war ein erhellende Moment. Es ist keine Vermeidung von relationalen Setup per se, aber es ist eine Vermeidung der Datenbank zusammen - KISS.

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