Das Speichern einer großen Anzahl unterschiedlicher Größe Objekte auf der Festplatte

StackOverflow https://stackoverflow.com/questions/260885

  •  06-07-2019
  •  | 
  •  

Frage

Ich brauche ein System zur Speicherung große Zahl (10 der 100 von Tausenden) von Objekten zu entwickeln. Jedes Objekt ist E-Mail-like - gibt es einen Haupttextkörper und mehr Nebentextfelder von begrenzten Größe. Ein Körper wird in der Größe von wenigen Bytes, auf mehr KB sein.

Jedes Element wird eine einzige eindeutige ID (wahrscheinlich ein GUID), die es identifiziert.

Der Speicher wird nur geschrieben werden, wenn ein Objekt, um es hinzugefügt wird. Es wird oft gelesen werden. Löschungen werden selten sein. Die Daten sind fast alle Menschen lesbarer Text, so dass es leicht komprimierbar sein wird.

Ein System, das mir die I / Os kann ausgeben und die Speicher Räude und Caching ideal wäre.

Ich werde die Indizes im Speicher zu halten, es mit Indizes auf die einzelnen (und primäre) Schlüssel für die Objekte abzubilden. Sobald ich den Schlüssel, dann lade ich werde es von der Festplatte oder dem Cache.

Das Datenmanagementsystem muss einen Teil meiner Anwendung sein - ich will nicht auf OS-Dienste abhängen. Oder separat Pakete installiert. Native (C ++) wäre am besten, aber ein manged (C #), was wäre in Ordnung sein.

Ich glaube, dass eine Datenbank eine offensichtliche Wahl ist, aber das muss super-schnell sein für ein Objekt sucht und Laden in dem Speicher. Ich bin nicht mit Datenbank-Tech erlebt und ich bin besorgt darüber, dass allgemeine relationale Systeme nicht alle diese variabler Größe Daten effizient verarbeiten.

(Beachten Sie, das hat nichts mit meiner Arbeit zu tun -. Es ist ein persönliches Projekt)

In Ihrer Erfahrung, was sind die Alternativen zu einer traditionellen relationalen DB? Oder funktionieren würde ein DB gut dafür?

War es hilfreich?

Lösung

Lesen Sie SQLite , hat es Bindings für viele Programmiersprachen und Umgebungen zur Verfügung und ist, wie der Berkeley DB , eine Datenbank auf der Festplatte, ohne die Notwendigkeit für eine Datenbank-Engine-Installation.

Wenn Sie nur die richtigen Indizes hinzufügen, wird Lookups sehr schnell sein, und da es sich um eine Set-basierte Datenbank am Herzen ist, können Sie immer noch Massenabfragen und ähnliche.

Andere Tipps

Ich würde PFS einen Versuch: http://blog.sensenet.hu/post/2008/05/Portal-File-System- (PFS) -an-Open-Source-Content-repository- für-Net.aspx

Schade, du bist auf c / .Net, als Hase eine perfekte Wahl gewesen wäre.

Sie zeigen nicht wirklich, wie Sie diese Daten gesucht werden. Ich habe einige ähnliche Arbeit mit einigen Text-Mining-Anwendungen durchgeführt, wo die Hauptdaten in MySQL gespeichert sind, aber ich einen Textsuchindex in Frettchen halten (das Projekt ist in Ruby) die entsprechende Zeile in der Nachrichtentabelle auf Keyword-Suche basiert zu finden. Ich denke, das Hybrid-Ansatz als auch für Sie arbeiten könnte. SQLServer und Lucene.Net kann für Sie arbeiten gut in der C # Umgebung. Ich bin sicher, wenn Sie schauen Sie sich um ähnliche Lösungen in der C ++ Raum finden können.

ich nicht empfehlen SQLServer Volltextsuche - Lucene und es ist Herleitungen scheinen eine viel bessere Wahl zu sein

.

Ich denke, dass Sie viel mehr Glück mit fast jeder DB-Lösung über eine dateibasierte Lösung würden. So gut wie jede moderne Datenbank sollte in der Lage sein, Ihre Datenanforderungen zu handhaben, zumindest Raum-weise. Der Aufbau der Indizes auf dem großen Feld ist eine andere Sache und deshalb würde ich einen Text-Mining-Ansatz empfehlen, wenn Sie über sie suchen müssen.

Klingt wie genau das, was Berkeley DB für entworfen wurde. Ich habe es nicht benutzt, aber.

Vielleicht sollten Sie einige Gedanken zu einem WebDav-Server geben wie Apache + mod-dav. Dieser speichert die conten und Metadaten auf dem Datenträger. Für die Suche können Sie eine vorhandene Suchmaschine im oberen Teil des WebDAV-Servers platzieren, zum Beispiel Lucene.

Auf diese Weise können Sie halten eigene Entwicklung auf ein Minimum und dem Beginn der mit einem leistungsfähigen Bündel von Funktionen.

Haben Sie sich unter db4o oder karvonite ?

Hier finden Sie aktuelle Glimpse .

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