2010-08-22 5 views
6

Wenn ich einen Satz von Tags (< 100) haben, und eine Reihe von Objekten (~ 25.000), wobei jedes Objekt eine Teilmenge der Tags hat, wissen Sie, von einer vorhandenen Datenstruktur, die für eine schnelle erlauben würde, Abrufen von Objekten, die eine boolesche Funktion der Tags erfüllen?Datenstruktur zur Beschleunigung der In-Memory-Suche nach Objekten auf der Booleschen Funktion der Tags?

Addition/Löschen von Tags und Objekte müssen nicht besonders schnell, aber die Auswahl der Objekte mit Tags, die die Boolesche Funktion erfüllen sollte.

Nun, da ich meine Frage geschrieben habe, sieht es so aus, als ob ich eine In-Memory-Datenbank beschreibe, aber ursprünglich dachte ich an eine binäre baumartige Struktur für die Objekte, wo für jeden Zweig links/rechter Zweig wäre gleichbedeutend mit der Entscheidung über have/have-not einige Tags. Aber das würde keine Pflege-Tags zulassen? Ich frage mich, wie ich mich gefragt habe, ob das schon einmal gemacht wurde und es schwer ist, nach Datenstrukturen zu suchen.

  • Vielen Dank im Voraus - Paddy.
+0

Ich nehme zur Kenntnis, dass die Antwort hier: http://stackoverflow.com/questions/3538322/many-to-many-data-structure-in-python ist eine im Speicher DB zu verwenden. – Paddy3118

+0

Die boolesche Funktion kann je nach Benutzereingaben unterschiedlich sein oder ist es nur eine Funktion (oder eine bekannte Gruppe von Funktionen)? Wenn nicht, sieht eine Datenbank wie die beste Option aus und eine Abfragesprache ist wahrscheinlich die beste Wahl. Sie könnten ansonsten eine Datenbank simulieren und inkrementell einen Entscheidungsbaum erstellen, der von den Eingaben abhängt und diesen Baum zwischenspeichert (fungiert als Index). – dirkgently

+0

Hi dirkently, Die Funktion würde auf Benutzereingaben basieren, und schnell genug wäre so schnell im Projekt zu bewerten, aber weil es früh ist - würde ich gerne Optionen erkunden. Vielen Dank. – Paddy3118

Antwort

6

Hier ist ein Vorschlag: für jeden Tag ein bisschen-Array verwenden, mit so vielen Elementen wie es Objekte sind; Jeder Index repräsentiert ein Objekt. Der Wert für jeden Index ist 1, wenn das Objekt dieses Tag hat.

Boolesche Funktionen auf Tags sind dann schnelle Operationen auf diesem Bit-Array. Und das resultierende Bit-Array gibt Ihnen die Dokumente, die die Kriterien erfüllen.

Dies ist nicht sehr effizient, wenn die Tags oder Objekte sich häufig ändern, aber vielleicht für Sie anwendbar sind.

+0

Dooh, natürlich! Danke. – Paddy3118

+0

@ paddy3118 Froh, dass Sie es nützlich finden. –

+1

AKA-Bitmap-Index: https://en.wikipedia.org/wiki/Bitmap_index –

0

Wie schnell würden Sie brauchen? Wie komplex ist die boolesche Funktion, d. H. Wie viele Tags werden in einer einzelnen typischen Funktion verwendet?

Wie wäre es mit einigen in Speicher SQL-Datenbank? Sie könnten dann die boolesche Funktion mit einer einfachen SELECT-Abfrage ausdrücken.

Verwandte Themen