Frage

Wie wir alle wissen, gibt es einige Datenindexierungstechniken, die von bekannten Indexierungs-Apps wie Lucene (für Java) oder Lucene.net (für .NET), Murmurhash, B+Baum usw. verwendet werden. Für ein No-SQL / Objekt Orientierte Datenbank (in der ich versuche, mit C#ein wenig zu schreiben/zu spielen), welche Technik, die Sie vorschlagen?

Ich habe über Murmurhash-2 gelesen und speziell V3-Kommentare sagen, Murmur sei sehr schnell. Auch Lucene.net hat gute Kommentare dazu. Aber was ist mit ihren Gedächtnis Fußabdrücken im Allgemeinen? Gibt es eine effiziente Lösung, die weniger Fußabdruck verwendet (und natürlich, wenn sie schneller vorzuziehen ist) als Lucene oder Murmeln? Oder sollte ich eine spezielle Indexstruktur schreiben, um die besten Ergebnisse zu erzielen?

Wenn ich versuche, meine eigenen zu schreiben, gibt es eine akzeptierte Skala für eine gute Indexierung, etwa 1% des Datenknotens oder 5% des Datenknotens? Jeder nützliche Hinweis wird geschätzt.

War es hilfreich?

Lösung

Ich denke, Sie haben einige Dinge in Ihrer Frage durcheinander gebracht. Lucene (ich weiß nichts über Lucene, Netz, aber ich nehme an, ist dieselbe) ist eine Bibliothek, die zur Analyse, Spaltung von Token und Speichern von Dokumenten verwendet wird, um sie später abfragen und abzurufen. Lucene hat ein ziemlich altes, aber effektives Modell, es verwendet umgekehrte Bäume, um Dokumente zu finden und abzurufen. Ohne weitere Details werden alle Dokumente in Token (Begriffe) geteilt, und für jeden Begriff wird eine Datenstruktur beibehalten, die alle Dokumente speichert, die den angegebenen Begriff enthalten. Als Datenstruktur könnte ein BTREE, eine Hash -Tabelle und in den neuesten wichtigen Überarbeitungen verwendet werden, können sogar Ihre eigenen Datenstrukturen anschließen.

Ein Btree (siehe Wikipedia -Seite Für weitere Details) ist eine Art Baumdatenstruktur, die für die Arbeit mit großen Datenbrocken geeignet ist und häufig zum Speichern von baumartigen geordneten Strukturen auf der Festplatte verwendet wird. Für In-Memory funktioniert andere Bäume besser.

Murmur Hash (siehe Wikipedia -Seite Für weitere Einzelheiten) ist eine Familie von Hash -Funktionen, die in der Hash -Tabelle verwendet werden. Die Implementierung der Hash -Tabelle ist nicht wichtig, es könnte sich um eine Standard -Kettenumsetzung oder ein fortgeschrittenes Open -Hash -Adressierungsschema handeln. Die Idee ist, dass die Hash -Tabellen ermöglicht, schnell einen Schlüssel zu erhalten, von einem nicht ordneten Schlüssel von Schlüssel und können auf Aufgaben wie folgt antworten: Ist dieser Schlüsselteil dieses Schlüsselsatzes? Welcher Wert ist diesem Schlüssel zugeordnet?

Jetzt zurück zu Ihrem Hauptproblem. Sie haben eine Bibliothek (Lucene) und Datenstrukturen, beide Datenstrukturen werden in Lucene verwendet. Jetzt sehen Sie, dass es nicht möglich ist, Ihre Frage in diesen Begriffen zu beantworten, da sie nicht vergleichbar sind.

In Bezug auf Ihren Fußabdruck und den Leistungsteil der Frage. Zunächst müssen Sie wissen, welche Art von Operationen Sie implementieren müssen.

Müssen Sie nur einen Mehrwert für den Schlüssel erhalten oder müssen Sie alle Elemente in einem Bereich finden? Mit anderen Worten, Sie brauchen Bestellung oder nicht? Wenn Sie dies tun, kann ein Baum helfen. Wenn Sie dies nicht tun, kann stattdessen eine Hash -Tabelle verwendet werden.

Haben Sie viele Daten, die nicht zum Speicher passen? Wenn ja, dann würde eine diskbasierte Lösung helfen (wie Bree). Wenn Ihre Daten in den Speicher passen, verwenden Sie die schnellste Lösung für die In-Memory und verwenden Sie die Festplatte nur als Speicher (mit einer anderen Struktur, viel einfacher).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit datascience.stackexchange
scroll top