Frage

Können Sie bitte zeigen Sie alternative Daten-storage-tools, und geben gute Gründe Sie zu benutzen, statt das gute, alte relationale Datenbanken?Meiner Meinung nach, die meisten Anwendungen werden nur selten die volle power von der SQL-es wäre interessant zu sehen, wie das erstellen einer SQL-Kostenlose Anwendung.

War es hilfreich?

Lösung

Nur-text-Dateien im Dateisystem

  • Sehr einfach zu erstellen und zu Bearbeiten
  • Für die Benutzer einfach zu Bearbeiten mit einfachen Werkzeugen (z.B.text-Editoren, grep usw.)
  • Effiziente Speicherung von Binär-Dokumente

XML-oder JSON-Dateien auf der Festplatte

  • Wie oben, aber mit ein bisschen mehr die Fähigkeit zu überprüfen die Struktur.

Arbeitsblatt / CSV-Datei

  • Sehr einfaches Modell für business-Anwender zu verstehen

Subversion (oder ähnliche disk-basierte version control system)

  • Sehr gute Unterstützung für die Versionierung von Daten

Berkeley-DB - (Im Grunde, eine disk-basierte hashtable)

  • Sehr einfach begrifflich (nur un-typed key/value)
  • Ziemlich schnell
  • Kein Verwaltungsaufwand
  • Unterstützt Transaktionen, glaube ich

Amazon Simple DB

  • Viel wie Berkeley DB, glaube ich, aber gehostet

Google App Engine Datastore

  • Gehostet und hochgradig skalierbar
  • Pro Dokument Schlüssel-Wert-Speicher (d.h.flexibles Datenmodell)

CouchDB

  • Dokument Fokus
  • Einfache Lagerung von halb-strukturiert / document-based data

Muttersprache Sammlungen (gespeichert in Speicher oder serieller auf der Festplatte)

  • Sehr Dichte Sprache, integration

Custom (hand-written) - Speicher-engine

  • Potenziell sehr hohe Leistung erforderlich uses cases

Ich kann nicht behaupten zu wissen, etwas viel über Sie, aber Sie können auch gerne einen Blick in Objekt-Datenbank-Systeme.

Andere Tipps

Matt Sheppard Antwort ist groß (mod), aber ich würde berücksichtigen Sie diese Faktoren, wenn man über eine Spindel:

  1. Struktur :tut es offensichtlich in Stücke brechen, oder sind Sie Kompromisse?
  2. Verwendung :wie werden die Daten analysiert/abgerufen/grokked?
  3. Lebensdauer :wie lange werden die Daten nützlich?
  4. Größe :wie viele Daten gibt es?

Ein besonderer Vorteil von CSV-Dateien über RDBMSes ist, dass Sie einfach zu kondensieren und sich bewegen zu praktisch jeder anderen Maschine.Wir machen große Daten transfers, und alles ist einfach genug, dass wir nur verwenden Sie eine große CSV-Datei, und einfach zu Skript mithilfe von tools wie rsync.Zu reduzieren Wiederholung auf große CSV-Dateien, Sie könnte so etwas wie YAML.Ich bin mir nicht sicher, ob ich speichern so etwas wie JSON oder XML, es sei denn, Sie hatten signifikante Beziehung-Anforderungen.

Soweit nicht erwähnten alternativen, nicht-Rabatt Hadoop, die ist ein open-source-Implementierung von MapReduce.Dies sollte gut funktionieren, wenn Sie haben eine TONNE von lose strukturierten Daten, die analysiert werden muss, und Sie will in einem Szenario, wo Sie nur können hinzufügen, weitere 10 Maschinen zu Griff Daten-Verarbeitung.

Zum Beispiel, begann ich zu versuchen, die Leistung zu analysieren, die im wesentlichen alle timing-Nummern verschiedener Funktionen protokolliert, die über rund 20 Maschinen.Nach versuchen zu stick alles in einem RDBMS, merkte ich, dass ich wirklich nicht brauchen, um die Daten abzufragen wieder einmal habe ich aggregiert es.Und, es ist nur nützlich, es ist aggregierter Form zu mir.Also, ich halten Sie die log-Dateien, komprimiert, und dann lassen Sie die aggregierten Daten in einer DB.

Hinweis Ich bin mehr daran gewöhnt, mit "großen" Größen.

Das Dateisystem ist prety praktisch für die Speicherung von binären Daten, welche nie funktioniert erstaunlich gut in relationalen Datenbanken.

Versuchen Prevayler:http://www.prevayler.org/wiki/ Prevayler ist die alternative zu RDBMS.In der Website weitere Informationen.

Wenn Sie nicht brauchen, SÄURE, Sie haben wahrscheinlich nicht den Aufwand eines RDBMS.So überprüfen Sie, ob Sie brauchen, die ersten.Die meisten der nicht-RDBMS Antworten hier tun nicht geben SÄURE.

Custom (hand-written) - Speicher-engine / Potentiell sehr hohe Leistung in erforderlichen Fällen verwendet

http://www.hdfgroup.org/

Wenn Sie haben eine enorme Datenmengen, anstatt Ihre eigenen Rollen, die Sie verwenden könnten, HDF, die Hierarchische Daten-Format.

http://en.wikipedia.org/wiki/Hierarchical_Data_Format:

HDF unterstützt verschiedene Datenmodelle, einschließlich mehrdimensionale arrays, Rasterbilder und Tabellen.

Es ist auch hierarchisch wie ein Datei-system, aber die Daten werden in einem magic-binary-Datei.

Im HDF5 ist eine suite, die ermöglicht die management von sehr großen und komplexen Datenbeständen.

Denken Sie petabytes von NASA/JPL remote sensing data.

G ' Day,

In einem Fall, der mir einfällt, ist, wenn die Daten, die Sie modellieren nicht leicht zu vertreten, in einer relationalen Datenbank.

Sobald ein solches Beispiel ist die Datenbank verwendet, die Mobilfunkbetreiber zur überwachung und Steuerung von Basisstationen für Mobilfunknetze.

Ich fast all diesen Fällen, eine OO DB verwendet wird, die entweder ein kommerzielles Produkt oder eine selbstgerollte system, dass ermöglicht heirarchies von Objekten.

Ich habe gearbeitet auf einem 3G-monitoring-Applikation für eine große Firma, die namenlos bleiben, aber deren logo ist ein Rotwein Fleck (-: und Sie benutzt wie ein OO-DB zu halten track von alle die verschiedenen Attribute für die einzelnen Zellen innerhalb des Netzwerks.

Verhör solcher DBs erfolgt mit proprietären Techniken, die in der Regel völlig frei von SQL.

HTH.

cheers,

Rob

Objekt-Datenbanken, nicht-relationale Datenbanken.Sie kann wirklich praktisch, wenn Sie wollen einfach nur, um Sachen einige Objekte in einer Datenbank.Sie unterstützen auch die Versionierung und ändern Sie die Klassen für Objekte, die bereits in der Datenbank vorhanden. db4o ist das erste, das mir einfällt.

In einigen Fällen (Finanz-Markt-Daten-und Prozess-Steuerung für Beispiel), die Sie möglicherweise verwenden müssen, um eine Echtzeit-Datenbank, anstatt ein RDBMS.Finden wiki-link

Es war ein RAD-tool genannt JADE geschrieben vor ein paar Jahren hat eine gebaut-in OODBMS.Frühere Inkarnationen von der DB-engine unterstützt, die auch Digitalk Smalltalk.Wenn Sie möchten, um die Probe Anwendung Gebäude mit einer nicht-RDBMS-Paradigma könnte dies der Anfang sein.

Andere OODBMS Produkte umfassen Objektivität, Edelstein (Sie benötigen zu bekommen VisualWorks Smalltalk zu führen Smalltalk und-version, aber es gibt auch eine java-version).Es gab auch einige open-source-Forschung-Projekte, die in diesem Raum - EXODUS und seine Nachkommen UFER in den Sinn kommen.

Leider, das Konzept schien zu sterben, einen Tod, wahrscheinlich durch das fehlen einer deutlich sichtbaren standard-und relativ schlechte ad-hoc-Abfrage-Fähigkeit, relativ zu SQL-basierten RDMBS-Systeme.

Ein OODBMS ist die meisten geeignet für Anwendungen mit core-data-Strukturen, die am besten als Grafik dargestellt von miteinander verbundenen Knoten.Ich pflegte zu sagen, dass die Quintessenz der OODBMS Anwendung war eine Multi-User-Dungeon (MUD), wo die Zimmer enthalten würde, Spieler Avatare und andere Objekte.

Sie können einen langen Weg gehen, nur mit Dateien, die im Dateisystem gespeichert.RDBMS sind immer besser im Umgang mit blobs, aber dies kann eine Natürliche Art und Weise zu verarbeiten Bilddaten und die wie, vor allem, wenn die Abfragen sind einfach (auflisten und auswählen einzelner Elemente.)

Andere Dinge, die nicht passen sehr gut in einem RDBMS sind hierarchische Datenstrukturen und ich vermute, Geodaten und 3D-Modelle sind nicht so einfach zu Arbeit mit entweder.

Dienste wie Amazon S3 Vereinfachung der Speicher-Modelle (key->value), die keine Unterstützung für SQL.Skalierbarkeit ist der Schlüssel dort.

Excel-Dateien können auch hilfreich, insbesondere, wenn Benutzer müssen in der Lage sein, die Daten Bearbeiten, die in einer vertrauten Umgebung und den Aufbau einer vollständigen Anwendung zu tun, ist nicht möglich.

Es gibt eine große Anzahl von Möglichkeiten, um Daten zu speichern - auch "relationale Datenbank" umfasst eine Reihe von alternativen, die von einer einfachen Bibliothek von code, der manipuliert, eine lokale Datei (oder Dateien), als ob es eine relationale Datenbank auf einem single-user-basis, über Datei-basierte Systeme als behandeln können mehrere Benutzer einer großen Auswahl an seriösen "server" basierte Systeme.

Wir verwenden XML-Dateien eine viel - bekommen Sie auch strukturierte Daten, die schöne tools für Abfragen derselben die Fähigkeit zu tun, Bearbeitungen, wenn angemessen, etwas, das den Menschen lesbar und nicht Sie dann zu befürchten, dass das db-engine zu arbeiten (oder die Funktionsweise der db-engine).Dies funktioniert gut für Dinge, die im wesentlichen nur Lesen (in unserem Fall mehr als oft nicht generiert aus einer Datenbank an anderer Stelle) und auch für single-user-Systeme, wo Sie können nur die Daten laden und speichern es als erforderlich - aber Sie sind die Schaffung von Möglichkeiten für Probleme, wenn Sie wollen multi-user-editing - zumindest von einzelnen Dateien.

Für uns war es das - wir-entweder Sie verwenden etwas, das Sie tun, SQL (MS bieten eine Reihe von tools, die aus ein .DLL single-user-Zeug bis hin zu enterprise-server, und Sie alle sprechen die gleiche SQL (mit Einschränkungen am unteren Ende)), oder wir gehen zu der Verwendung von XML als format, weil die (für uns) die Ausführlichkeit nur selten ein Problem.

Wir verfügen momentan nicht über die zum Bearbeiten der binären Daten in unseren apps, so dass die Frage entsteht nicht.

Murph

Ein vielleicht möchten erwägen Sie die Verwendung eines LDAP-Servers anstelle einer traditionellen SQL-Datenbank, wenn die Anwendung Daten stark Schlüssel/Wert-orientierten und hierarchisch in der Natur.

BTree-Dateien sind oft sehr viel schneller als relationale Datenbanken.SQLite enthält in sich eine BTree-Bibliothek, die in der öffentlichen Domäne (wie in echt 'public domain', nicht verwenden den Begriff Locker).

Ehrlich gesagt, obwohl, wenn ich wollte, ein multi-user-system, das ich benötigen würde eine Menge zu überzeugen, nicht um einen anständigen server relationale Datenbank.

Volltext-Datenbanken, die kann abgefragt werden mit proximity-Operatoren wie "innerhalb von 10 Worte", etc.

Relationale Datenbanken sind eine ideale business-tool für viele Zwecke - einfach genug zu verstehen und zu entwerfen, schnell genug, ausreichend, auch wenn Sie sind nicht so konzipiert und optimiert, indem ein Genie, könnte "die volle power", etc.

Aber einige geschäftliche Zwecke benötigen, full-text indexing, welche relationalen Motoren sind entweder nicht bieten oder Heften wie ein nachträglicher Einfall.Insbesondere die rechtlichen und medizinischen Bereichen haben große Teile von unstrukturiertem text zu speichern und zu Durchwaten.

Auch:* Embedded-Szenarien - Wo in der Regel ist es erforderlich, etwas kleiner als ein vollwertiges RDBMS. Db4o ist ein ODB, die kann leicht verwendet werden in einem solchen Fall.* Schnelle oder proof-of-concept-Entwicklung - wo Sie wollen, um den Fokus auf das Geschäft und nicht sorgen über die Persistenz-Schicht

CAP-theorem es erklärt kurz und bündig.SQL bietet hauptsächlich "Starke Konsistenz:alle Kunden finden Sie unter die gleichen anzeigen können, selbst in Anwesenheit von updates".

K. I. S. S:Halten Sie Es Klein und Einfach

Ich möchte Ihnen RDBMS :) Wenn Sie nicht die Gewohnheit haben Probleme mit der Einrichtung/Verwaltung gehen für SQLite.Gebaut in RDBMS mit volle SQL-Unterstützung.Es erlaubt Ihnen sogar, zu speichern, jede Art von Daten in jeder Spalte.

Wichtigsten Vorteil gegenüber zum Beispiel der log-Datei:Wenn Sie haben eine riesige, wie werden Sie gehen, um suchen in es?Mit SQL-engine, erstellen Sie einfach index und beschleunigt die Bedienung erheblich.

Über die Volltext-Suche:SQLite verfügt über Module für die Volltextsuche auch..

Genießen Sie einfach schöne standard-Schnittstelle für Ihre Daten :)

Ein guter Grund, nicht eine relationale Datenbank zu benutzen, wäre, wenn Sie haben eine massive data set und tun wollen, Massiv parallele und verteilte Verarbeitung der Daten.Der Google-index wäre ein perfektes Beispiel für einen solchen Fall.

Hadoop hat auch eine Implementierung der Google File System genannt Hadoop Distributed File System.

Ich würde dringend empfehlen Lua als alternative zu SQLite-Daten-Speicher.

Denn:

  • Die Sprache wurde als data description language, um mit zu beginnen
  • Die syntax ist von Menschen lesbar (XML nicht)
  • Man kann compile Lua Brocken zu binäre, für zusätzliche Leistung

Dies ist die "Muttersprache Sammlung" in der akzeptierten Antwort.Wenn Sie mit C/C++ als application-level -, ist es durchaus sinnvoll, zu werfen in die Lua-engine (100kB von binären) nur zum Zwecke des Lesens configs/data oder schreiben Sie Sie heraus.

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