Einfache Textdateien in einem Dateisystem
- Sehr einfach zu erstellen und zu bearbeiten
- Benutzer können einfach mit einfachen Tools (z. B. Texteditoren, Grep usw.) arbeiten.
- Effiziente Speicherung von Binärdokumenten
XML- oder JSON-Dateien auf der Festplatte
- Wie oben, jedoch mit etwas mehr Fähigkeit, die Struktur zu validieren.
Tabellenkalkulations- / CSV-Datei
- Sehr leicht zu verstehendes Modell für Geschäftsanwender
Subversion (oder ein ähnliches festplattenbasiertes Versionskontrollsystem)
- Sehr gute Unterstützung für die Versionierung von Daten
Berkeley DB (Grundsätzlich eine festplattenbasierte Hashtabelle)
- Konzeptionell sehr einfach (nur nicht eingegebener Schlüssel / Wert)
- Ziemlich schnell
- Kein Verwaltungsaufwand
- Unterstützt Transaktionen, glaube ich
Amazon Simple DB
- Ähnlich wie Berkeley DB, glaube ich, aber gehostet
Googles App Engine-Datenspeicher
- Gehostet und hoch skalierbar
- Schlüsselwertspeicherung pro Dokument (dh flexibles Datenmodell)
CouchDB
- Dokumentfokus
- Einfache Speicherung von halbstrukturierten / dokumentbasierten Daten
Muttersprachensammlungen (im Speicher gespeichert oder auf der Festplatte serialisiert)
- Sehr enge Sprachintegration
Benutzerdefinierte (handgeschriebene) Speicher-Engine
- Potenziell sehr hohe Leistung in erforderlichen Anwendungsfällen
Ich kann nicht behaupten, viel über sie zu wissen, aber Sie möchten vielleicht auch einen Blick auf Objektdatenbanksysteme werfen .
Die Antwort von Matt Sheppard ist großartig (mod up), aber ich würde diese Faktoren berücksichtigen, wenn ich an eine Spindel denke:
Ein besonderer Vorteil von CSV-Dateien gegenüber RDBMS besteht darin, dass sie leicht komprimiert und auf praktisch jeden anderen Computer übertragen werden können. Wir führen große Datenübertragungen durch, und alles ist einfach genug. Wir verwenden nur eine große CSV-Datei und können mit Tools wie rsync einfach skripten. Um die Wiederholung großer CSV-Dateien zu verringern, können Sie beispielsweise YAML verwenden . Ich bin mir nicht sicher, ob ich etwas wie JSON oder XML speichern würde, es sei denn, Sie hatten erhebliche Beziehungsanforderungen.
Bei nicht erwähnten Alternativen sollten Sie Hadoop , eine Open-Source-Implementierung von MapReduce , nicht außer Acht lassen. Dies sollte gut funktionieren, wenn Sie eine TONNE lose strukturierter Daten haben, die analysiert werden müssen, und Sie möchten sich in einem Szenario befinden, in dem Sie nur 10 weitere Maschinen hinzufügen können, um die Datenverarbeitung zu handhaben.
Zum Beispiel habe ich versucht, die Leistung zu analysieren, bei der es sich im Wesentlichen um alle Zeitnummern verschiedener Funktionen handelt, die auf rund 20 Computern protokolliert wurden. Nachdem ich versucht hatte, alles in ein RDBMS zu stecken, wurde mir klar, dass ich die Daten nach der Aggregation wirklich nicht erneut abfragen muss. Und es ist nur in seinem aggregierten Format für mich nützlich. Also behalte ich die Protokolldateien bei, komprimiere sie und lasse die aggregierten Daten in einer Datenbank.
Hinweis: Ich bin eher daran gewöhnt, mit "großen" Größen zu denken.
quelle
Das Dateisystem ist praktisch zum Speichern von Binärdaten, was in relationalen Datenbanken nie besonders gut funktioniert.
quelle
Probieren Sie Prevayler aus: http://www.prevayler.org/wiki/ Prevayler ist eine Alternative zu RDBMS. Auf der Seite haben Sie weitere Informationen.
quelle
Wenn Sie keine ACID benötigen , benötigen Sie wahrscheinlich nicht den Overhead eines RDBMS. Stellen Sie also zuerst fest, ob Sie das benötigen. Die meisten der hier bereitgestellten Nicht-RDBMS-Antworten enthalten keine ACID.
quelle
http://www.hdfgroup.org/
Wenn Sie über enorme Datenmengen verfügen, können Sie HDF, das hierarchische Datenformat, verwenden, anstatt Ihre eigenen zu rollen.
http://en.wikipedia.org/wiki/Hierarchical_Data_Format :
Es ist auch hierarchisch wie ein Dateisystem, aber die Daten werden in einer magischen Binärdatei gespeichert.
Denken Sie an Petabyte an NASA / JPL-Fernerkundungsdaten.
quelle
Tag auch,
Ein Fall, an den ich denken kann, ist, wenn die Daten, die Sie modellieren, nicht einfach in einer relationalen Datenbank dargestellt werden können.
Ein solches Beispiel ist die Datenbank, die von Mobilfunkbetreibern zur Überwachung und Steuerung von Basisstationen für Mobilfunknetze verwendet wird.
In fast allen diesen Fällen wird eine OO-Datenbank verwendet, entweder ein kommerzielles Produkt oder ein selbstgerolltes System, das Hierarchien von Objekten ermöglicht.
Ich habe an einer 3G-Überwachungsanwendung für ein großes Unternehmen gearbeitet, das namenlos bleibt, dessen Logo jedoch ein Rotweinfleck ist (- :, und sie haben eine solche OO-Datenbank verwendet, um alle verschiedenen Attribute für einzelne Zellen innerhalb der zu verfolgen Netzwerk.
Die Abfrage solcher DBs erfolgt mit proprietären Techniken, die normalerweise vollständig frei von SQL sind.
HTH.
Prost,
rauben
quelle
Objektdatenbanken sind keine relationalen Datenbanken. Sie können sehr praktisch sein, wenn Sie nur einige Objekte in eine Datenbank einfügen möchten. Sie unterstützen auch die Versionierung und ändern Klassen für Objekte, die bereits in der Datenbank vorhanden sind. db4o ist der erste, der mir in den Sinn kommt.
quelle
In einigen Fällen (z. B. Finanzmarktdaten und Prozesskontrolle) müssen Sie möglicherweise eine Echtzeitdatenbank anstelle eines RDBMS verwenden. Siehe Wiki-Link
quelle
Vor einigen Jahren wurde ein RAD-Tool namens JADE geschrieben, das über ein integriertes OODBMS verfügt. Frühere Inkarnationen der DB-Engine unterstützten auch Digitalk Smalltalk. Wenn Sie die Anwendungserstellung mit einem Nicht-RDBMS-Paradigma testen möchten, ist dies möglicherweise ein Anfang.
Andere OODBMS-Produkte umfassen Objectivity , GemStone (Sie benötigen VisualWorks Smalltalk, um die Smalltalk-Version auszuführen, es gibt jedoch auch eine Java-Version). Es gab auch einige Open-Source-Forschungsprojekte in diesem Bereich - EXODUS und sein Nachkomme SHORE kommen in den Sinn.
Leider schien das Konzept einen Tod zu erleiden, wahrscheinlich aufgrund des Fehlens eines klar sichtbaren Standards und der relativ schlechten Ad-hoc-Abfragefähigkeit im Vergleich zu SQL-basierten RDMBS-Systemen.
Ein OODBMS eignet sich am besten für Anwendungen mit Kerndatenstrukturen, die am besten als Diagramm miteinander verbundener Knoten dargestellt werden. Ich habe immer gesagt, dass die Quintessenz der OODBMS-Anwendung ein Multi-User-Dungeon (MUD) ist, in dem Räume Avatare von Spielern und andere Objekte enthalten.
quelle
Sie können einen langen Weg gehen, indem Sie nur Dateien verwenden, die im Dateisystem gespeichert sind. RDBMSs können Blobs immer besser verarbeiten. Dies kann jedoch eine natürliche Methode sein, um Bilddaten und dergleichen zu verarbeiten, insbesondere wenn die Abfragen einfach sind (Auflisten und Auswählen einzelner Elemente).
Andere Dinge, die nicht sehr gut in ein RDBMS passen, sind hierarchische Datenstrukturen, und ich vermute, dass Geodaten und 3D-Modelle auch nicht so einfach zu bearbeiten sind.
Dienste wie Amazon S3 bieten einfachere Speichermodelle (Schlüssel-> Wert), die SQL nicht unterstützen. Skalierbarkeit ist dort der Schlüssel.
Excel-Dateien können ebenfalls nützlich sein, insbesondere wenn Benutzer in der Lage sein müssen, die Daten in einer vertrauten Umgebung zu bearbeiten und eine vollständige Anwendung zu erstellen, um dies zu tun, ist dies nicht möglich.
quelle
Es gibt eine Vielzahl von Möglichkeiten zum Speichern von Daten - selbst "relationale Datenbanken" decken eine Reihe von Alternativen ab, von einer einfachen Codebibliothek, die eine lokale Datei (oder Dateien) so manipuliert, als wäre es eine relationale Datenbank auf Einzelbenutzerbasis dateibasierte Systeme, die mehrere Benutzer mit einer großzügigen Auswahl seriöser "serverbasierter" Systeme versorgen können.
Wir verwenden häufig XML-Dateien - Sie erhalten gut strukturierte Daten, nützliche Tools zum Abfragen derselben sowie die Möglichkeit, gegebenenfalls Änderungen vorzunehmen, etwas, das von Menschen gelesen werden kann, und Sie müssen sich dann keine Gedanken über die Funktionsweise der DB-Engine (oder die Funktionsweise der) machen DB-Motor). Dies funktioniert gut für Dinge, die im Wesentlichen schreibgeschützt sind (in unserem Fall meistens aus einer Datenbank an anderer Stelle generiert), und auch für Einzelbenutzersysteme, bei denen Sie die Daten einfach laden und nach Bedarf speichern können - aber Sie schaffen Möglichkeiten bei Problemen, wenn Sie mehrere Benutzer bearbeiten möchten - mindestens eine einzelne Datei.
Für uns ist das schon alles - wir werden entweder etwas verwenden, das SQL unterstützt (MS bietet eine Reihe von Tools an, die von einer DLL ausgeführt werden, um Einzelbenutzer-Aufgaben bis hin zum Unternehmensserver auszuführen, und alle sprechen dasselbe SQL (mit Einschränkungen am unteren Ende)) oder wir werden XML als Format verwenden, da (für uns) die Ausführlichkeit selten ein Problem darstellt.
Wir müssen derzeit keine Binärdaten in unseren Apps bearbeiten, damit diese Frage nicht auftaucht.
Murph
quelle
Möglicherweise möchten Sie die Verwendung eines LDAP-Servers anstelle einer herkömmlichen SQL-Datenbank in Betracht ziehen, wenn die Anwendungsdaten stark schlüssel- / wertorientiert und hierarchisch sind.
quelle
BTree-Dateien sind oft viel schneller als relationale Datenbanken. SQLite enthält eine BTree-Bibliothek, die gemeinfrei ist (wie in echt 'gemeinfrei', ohne den Begriff lose zu verwenden).
Ehrlich gesagt, wenn ich ein Mehrbenutzersystem wollte, müsste ich viel davon überzeugen, keine anständige relationale Serverdatenbank zu verwenden.
quelle
Volltextdatenbanken, die mit Proximity-Operatoren wie "innerhalb von 10 Wörtern von" usw. abgefragt werden können.
Relationale Datenbanken sind für viele Zwecke ein ideales Geschäftswerkzeug - einfach zu verstehen und zu entwerfen, schnell genug, angemessen, auch wenn sie nicht von einem Genie entworfen und optimiert wurden, das "die volle Leistung nutzen" kann usw.
Einige Geschäftszwecke erfordern jedoch eine Volltextindizierung, die relationale Engines entweder nicht bereitstellen oder nachträglich in Angriff nehmen. Insbesondere in den Bereichen Recht und Medizin gibt es große Mengen unstrukturierten Textes zum Speichern und Durchblättern.
quelle
Außerdem: * Eingebettete Szenarien - Wo normalerweise etwas kleineres als ein vollwertiges RDBMS verwendet werden muss. Db4o ist eine ODB, die in einem solchen Fall leicht verwendet werden kann. * Schnelle oder Proof-of-Concept-Entwicklung - hier möchten Sie sich auf das Geschäft konzentrieren und müssen sich keine Gedanken über die Persistenzschicht machen
quelle
Der CAP-Satz erklärt es kurz und bündig. SQL bietet hauptsächlich "Starke Konsistenz: Alle Clients sehen dieselbe Ansicht, auch wenn Aktualisierungen vorhanden sind".
quelle
KISS: Halte es klein und einfach
quelle
Ich würde RDBMS anbieten :) Wenn Sie keine Probleme mit der Einrichtung / Verwaltung haben möchten, wählen Sie SQLite. Eingebautes RDBMS mit vollständiger SQL-Unterstützung. Sie können sogar jeden Datentyp in einer beliebigen Spalte speichern.
Hauptvorteil gegenüber beispielsweise einer Protokolldatei: Wenn Sie eine große haben, wie werden Sie darin suchen? Mit der SQL Engine erstellen Sie einfach einen Index und beschleunigen den Betrieb erheblich.
Informationen zur Volltextsuche: SQLite verfügt auch über Module für die Volltextsuche.
Genießen Sie einfach eine schöne Standardschnittstelle zu Ihren Daten :)
quelle
Ein guter Grund, keine relationale Datenbank zu verwenden, ist, wenn Sie über einen massiven Datensatz verfügen und eine massiv parallele und verteilte Verarbeitung der Daten durchführen möchten. Der Google Web Index wäre ein perfektes Beispiel für einen solchen Fall.
Hadoop hat auch eine Implementierung des Google-Dateisystems namens Hadoop Distributed File System .
quelle
Ich würde Lua dringend als Alternative zur Datenspeicherung nach SQLite empfehlen.
Weil:
Dies ist die Option "Sammlung von Muttersprachen" der akzeptierten Antwort. Wenn Sie C / C ++ als Anwendungsebene verwenden, ist es durchaus sinnvoll, die Lua-Engine (100 KB Binärdatei) nur zum Lesen oder Ausschreiben von Konfigurationen / Daten einzusetzen.
quelle