Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Suche Datenbank zur einfachen Onlinesuche

Dieses Thema im Forum "Andere Datenbankserver" wurde erstellt von weidontcare, 14 April 2017.

  1. weidontcare

    weidontcare Neuer Benutzer

    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
     
  2. drdimitri

    drdimitri Datenbank-Guru

    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.
     
  3. akretschmer

    akretschmer Datenbank-Guru

    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.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden