Suche Datenbank zur einfachen Onlinesuche

weidontcare

Neuer Benutzer
Beiträge
1
Moin,

ich jetzt schon mehrere Datenbanken ausprobiert, aber nicht wirklich das richtige gefunden und bin auch ein bisschen von der Masse an vorhandenen Datenbanken erschlagen.

Ich suche eine Datenbank, in welcher ich eine Datei unerheblichen Dateityps (eigenes XML-Format) mit Tags verknüpfen kann, welche beim hochladen über ein Formular auf einer Webseite mitgegeben werden.

Die Datenbank möchte ich dann später einfach über ein Suchfeld mithilfe der Tags durchsuchen.

Gibt es hierfür eine einfache Lösung?

Meine Anforderungen liegen eigentlich ja sehr nah an SQL - doch wird überall davon abgeraten SQL mit Dateiformaten zu verknüpfen.

Ich würde mich über Vorschläge freuen

Viele Grüße
 
Werbung:
Gibt es hierfür eine einfache Lösung?

Meine Anforderungen liegen eigentlich ja sehr nah an SQL - doch wird überall davon abgeraten SQL mit Dateiformaten zu verknüpfen.
Definiere einfach. Welche Vorkenntnisse hast du denn?

Für große Datenmengen ist das eine typische Aufgabe für noSql Datenbanken.
In deinem Fall kann das auch die eingebaute Volltextsuche diverser Datenbanken wie mysql, Postgres, Oracle etc. leisten.
 
Werbung:
Ich suche eine Datenbank, in welcher ich eine Datei unerheblichen Dateityps (eigenes XML-Format) mit Tags verknüpfen kann, welche beim hochladen über ein Formular auf einer Webseite mitgegeben werden.

Versteh ich Dich richtig: Du hast 2 Felder. In dem einen stehen irgend welche Daten. Das kann eine XML-Datei sein oder auch ein Pornofilm. Im zweiten Feld willst Du 1 oder mehrere Tags dazu ablegen, also Beschreibungen/Kategorien für das, was im ersten Feld drin ist, oder? Und später willst Du in dieses Tags suchen können: dazu willst Du dann wieder 1 oder mehrere Tags aufzählen, und die Such soll alle Rows liefern, wo das zutrifft. Dies sollte, wie üblich dann auch schnell gehen - also indexbasiert. Korrekt?

Code:
test=# create table tags(data text, tags text[]);
CREATE TABLE
test=*# create index index_tags on tags using gin (tags);
CREATE INDEX
test=*# insert into tags values ('erster text', array['tag1', 'tag2', 'tag3']);
INSERT 0 1
test=*# insert into tags values ('zweiter text', array['tag2', 'tag4', 'tag5']);
INSERT 0 1
test=*# insert into tags values ('dritter text', array['tag1', 'tag3', 'tag6']);
INSERT 0 1
test=*# explain analyse select * from tags where tags @> array['tag3'];
  QUERY PLAN   
--------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on tags  (cost=12.03..20.49 rows=4 width=64) (actual time=0.031..0.032 rows=2 loops=1)
  Recheck Cond: (tags @> '{tag3}'::text[])
  Heap Blocks: exact=1
  ->  Bitmap Index Scan on index_tags  (cost=0.00..12.03 rows=4 width=0) (actual time=0.021..0.021 rows=2 loops=1)
  Index Cond: (tags @> '{tag3}'::text[])
 Planning time: 0.542 ms
 Execution time: 0.097 ms
(7 Zeilen)

test=*# select * from tags where tags @> array['tag3'];
  data  |  tags   
--------------+------------------
 erster text  | {tag1,tag2,tag3}
 dritter text | {tag1,tag3,tag6}
(2 Zeilen)

test=*# select * from tags where tags @> array['tag3', 'tag1'];
  data  |  tags   
--------------+------------------
 erster text  | {tag1,tag2,tag3}
 dritter text | {tag1,tag3,tag6}
(2 Zeilen)

test=*# select * from tags where tags @> array['tag3', 'tag1', 'tag6'];
  data  |  tags   
--------------+------------------
 dritter text | {tag1,tag3,tag6}
(1 Zeile)

test=*# explain analyse select * from tags where tags @> array['tag3', 'tag1', 'tag6'];
  QUERY PLAN   
--------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on tags  (cost=20.00..24.01 rows=1 width=64) (actual time=0.039..0.040 rows=1 loops=1)
  Recheck Cond: (tags @> '{tag3,tag1,tag6}'::text[])
  Heap Blocks: exact=1
  ->  Bitmap Index Scan on index_tags  (cost=0.00..20.00 rows=1 width=0) (actual time=0.029..0.029 rows=1 loops=1)
  Index Cond: (tags @> '{tag3,tag1,tag6}'::text[])
 Planning time: 0.125 ms
 Execution time: 0.080 ms
(7 Zeilen)

test=*#

Das sind jetzt natürlich keine Datenmengen, und ich habe auch Seq-Scans disabled (bzw. als sehr teuer definiert) - aber wie man sieht, wird hier der GIN-Index genutzt. Das ist dann also auch noch bei größeren Datenmengen schnell.
 
Zurück
Oben