2011-01-16 4 views
-6

Wie erstellt man einen vollständigen Index in einem sortierten (z. B. basierend auf einem B + Baum) oder unsortiert (z. B. einfache Hashtabelle) Schlüssel/Wert-Datenbank manuell, um Daten mit SQL-Syntax zu speichern und zuzugreifen?SQL Indizierung in einer Schlüssel/Wert-Datenbank?

Danke.

+2

Ich kann nicht sehen, wie die Indizierung Ihnen erlauben würde, SQL zu verwenden. Indizes als solche sind keine wesentliche Voraussetzung für eine SQL-Datenbank. –

+0

Können Sie vielleicht einen Hinweis auf das von Ihnen erwogene Schema und auf die Art der Abfragen geben, die Sie ausführen möchten? –

+0

Fragen Sie, wie Sie die SQL-Syntax in einer NoSQL-Datenbank verwenden? – jva

Antwort

3

Sicher. Aber verwenden Sie dieses Konzept nicht in einer ereignisgesteuerten Echtzeit-Datenbanklösung und versuchen Sie es zu patentieren - ich habe das vor Ihnen gefunden.

Jeder Datensatz ist ein Array von Objekten, ein Element pro Feld, in einem Datensatzobjekt eingeschlossen.

Es gibt ein Wörterbuch pro Tabelle, das die Namen der Felder als Schlüssel und deren Indizes in den Datensatzfeldern als Werte enthält.

Erstellen Sie ein Wörterbuch pro Tabelle für die Primärschlüssel, wobei der Primärschlüssel der Schlüssel und der Datensatz/Array der Wert ist.

Erstellen Sie eine eindeutige Sprungliste für jedes indizierte Feld (Balanced binary trees sind nicht duplikatfreundlich). Der Schlüssel ist der Feldwert. Der Wert wird der Datensatz/das Array sein. Das Datensatzobjekt enthält eine Referenz für seinen Auslistknoten für jeden der Indizes in der Tabelle.

Alle diese in einem Tabellenobjekt einkapseln. Die Tabellenobjekte werden in einem Wörterbuch gespeichert, wobei der Schlüssel ein Tabellenname und der Wert das Tabellenobjekt ist. Dieses Wörterbuch wird in einem Datenbankobjekt enthalten sein.

Machen Sie die Tabellen- und Datenbankobjekte mit Lambda-Ausdrücken und möglicherweise vollständigem LINQ abfragbar. Möglicherweise müssen Sie einen SQL-Textparser schreiben, aber nach all den anderen Arbeiten wird es ein Kinderspiel.

Wenn Sie fertig sind, Herzlichen Glückwunsch! Sie haben das Rad neu erfunden! Aber manchmal brauchst du nur ein Custom-Rad. Ich bin gerade dabei, dieses Konzept selbst zu implementieren, nur mit viel mehr Twists (wie Compound-Keys und volle Constraint-Unterstützung).

10

Was Sie fragen, wird von Ihrem RDBMS für Sie erledigt.

Ob der INDEX ein Binärbaum ist oder nicht, hängt vom RDBMS ab, sollte jedoch als irrelevant behandelt werden. Erstellen Sie einfach Ihre Tabelle, erstellen Sie Ihren Index, fügen Sie Ihre Daten ein und fragen Sie Ihre Tabelle ab. Nicht darüber, wie es unter der Haube umgesetzt wird.

Interessanterweise haben Sie eine bestimmte Version von SQL, die Sie verwenden, oder einen bestimmten Bedarf, der erklärt, warum die Implementierung relevant ist?

2

Wie erwähnt, Indizes werden von der Datenbank-Engine unter der Haube erstellt. In Oracle beispielsweise generiert das System standardmäßig den Index als B-Tree-Index. Dies hilft im Allgemeinen dabei, die großen Arten zu vermeiden, die erforderlich sind, während die Daten an einen Endbenutzer gelangen.

Die Syntax ist folgende:

create index index_name 
on table_name (column_names); 

für Teradata, der Index-Mechanismus das Rückgrat ist, die Daten zu speichern und nicht arbeiten, um die Art und Weise Oracle. Lass es mich wissen, wenn es das ist, wonach du gesucht hast. In diesem Fall kann ich Teradata näher ausführen.

3

Wenn dies ein EAV ist (und nicht irgendein NoSQL), ist Ihre Indizierung eingeschränkt.

CREATE INDEX (genaue Syntax hängt vom RDBMS ab) zweimal für die Kombinationen (Schlüssel, Wert) und (Wert, Schlüssel).