Ich bin auf der Suche nach einer Datenbank die meine Daten besonders kompakt aufbewahrt und gut indiziert. Die Daten sind relativ einfach es handelt sich um zweidimensionale Koordinaten mit ein paar Eigenschaften. Wobei es unterschiedliche Typen von Daten gibt, sprich die Art und Anzahl der Eigenschaften kann variieren. In einer Relationedatenbank würde man Verschiedene Tabellen haben die die Daten für die unterschiedlichen Typen von Eigenschaften vorhalten und eine Tabelle für die Koordinaten. Wobei es dann einen Index auf die Koordinaten geben würde. Das Problem was ich habe ist, dass es wirklich viele Daten sind, zig Millionen bis Milliarden Punkte. Die Daten sind eigentlich sehr einfach, nehmen in den Files (ASCII) einige TB Platz weg. Bevor ich einfach mit dem Anfange was ich habe (Postgres) und dann in ein paar Wochen gegen die Wand fahre wolle ich hier mal gefragt haben ob ich eine Chance habe diese Daten eine Datenbanksystem anzuvertrauen.
Also bei so vielen Daten und Index fallen mir Map-Reduce-Datenbanken wie Hadoop ein. Der Google-Index ist zum Teil mit so einer Technologie aufgebaut. Aus einer Menge EIngangsdaten (Key-Value-Paaren) wird durch das Map-Reduce-Verfahren eine Menge Ausgangsdaten, die indizert sind nach einem Kriterium, das das Map-Reduce-Verfahren berücksichtig. http://hadoop.apache.org/
Also eine SQLite-Datenbank, Access und co fallen sowieso schonmal raus.
Jetzt bleibt die Frage, brauchst/willst du eine Relationale Datenbank haben oder nicht?
Bei den Relationalen Datenbanken sollte eine MSSQL-, MySQL- oder Oracel-Datenbank auf einem entsprechend performanten Server diese Datenmengen problemlos handhaben könnnen. Wir haben hier auf Arbeit eine MSSQL-Datenbank auf 12 CPU-Kern und 24 GB Arbeitsspeicher welche etwa 3 Millarden Datensätze in unterscheidlichsten Tabellen verwaltet, inidziert und verknüpft und die diese Datenmengen problemlos verwalten kann (Antwortzeiten < 20 ms, selten auch mal 2s). Neuindizierungen machen wir Nachts was die Leistung des SQL-Servers weiter verbessert.
Alternativ kannst du auch Semistrukturierte Datenbanken verwenden. Diese kommen ohne feste Tabellen und Spaltenbeschreibungen aus und verfügen teilweise über Map-Reduce-Verfahren die redundanten Datensätze vermeiden soll. In weiweit das auf dein Projekt / deine Daten zutrifft musst du selbst beurteilen. In der Regel sind diese bei der Verarbeitung großer Datenmängen schneller aber eine wichtige Einschränkung gibt es. Sie sind nicht transaktionsicher. Sie haben keinen Anspruch auf Vollständigkeit und relationale Richtigkeit der Daten, schließlich sind es nur Key-Value-Paare. Wichtig ist auch das Thema der Inidizierungen das je nach Datenbankhersteller anders angegangen wird.
Von einer Objektorientierten Datenbank würd ich bei diesen Datenmengen aus praktischer sicht abraten. Ersten sind OODs bei Schreiboperationen aufgrund redundanter Datenpfade langsamer als Relationale Datenbanken. Zum anderen lohnt sich der Verwaltungsaufwand für die beschriebenen Daten nicht.
Meine Empfehlung: Wenn du genug Hardware hast, nimm eine relationale Datenbank.