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

key value

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Lisa_4, 24 Januar 2015.

  1. Lisa_4

    Lisa_4 Neuer Benutzer

    kann mir jemand helfen weiterhelfen?

    ich verstehe " key value datenbank" nicht kann mir jemand an einem beispiel erklären
    vielen dank im voraus
    lg lisa
     
    Zuletzt von einem Moderator bearbeitet: 24 Januar 2015
  2. akretschmer

    akretschmer Datenbank-Guru

    http://www.postgresql.org/docs/9.4/interactive/hstore.html

    Da steht alles, was Dich interessiert.
     
    Zuletzt von einem Moderator bearbeitet: 24 Januar 2015
  3. akretschmer

    akretschmer Datenbank-Guru

    Um das noch mal anders zu erklären: Key-Value Datenbanken sind z.B. Redis. Siehe http://de.wikipedia.org/wiki/Redis.

    Sie speichern Daten in einem sehr einfachen Model: ein Schlüssel und ein Wert -> Key Value. Der Schlüssel ist z.B. Dein Benutzeraccount, der Value z.B. in einem Onlineshop Dein Einkaufswagen. Value wird dann natürlich etwas komplexer sein, damit die Artikel, deren Anzahl und weitere Merkmale da alle zusammen drinne stehen. Dafür nimmt man of JSON-Dokumente, siehe http://de.wikipedia.org/wiki/JavaScript_Object_Notation. Das kann man natürlich in jeder normalen SQL-DB so als Key-Value speichern (Textfelder), aber Redis ist bei sowas erheblich schneller, und ein Webshop soll schnell sein. Redis ist, das sehe ich @work, grad recht im kommen.


    Um jetzt wieder den bei mir fälligen Bogen zu PostgreSQL zu bekommen: von https://github.com/nahanni/rw_redis_fdw habe ich mir für PostgreSQL einen sog. Foreign Data Wrapper geholt und gebaut, damit kann ich aus PostgreSQL heraus auf eine Redis-Datenbank schreibend und lesend zugreifen.

    Ich habe also jetzt einen Redis-Server lokal am laufen und diesen in PostgreSQL eingebunden:

    Code:
    est=*# select * from pg_foreign_server ;
      srvname  | srvowner | srvfdw | srvtype | srvversion | srvacl |  srvoptions
    --------------+----------+--------+---------+------------+--------+----------------------------
     redis_server |  16384 |  18838 |  |  |  | {host=127.0.0.1,port=6379}
    (1 row)
    
    Dazu habe ich eine Foreign Table definiert:

    Code:
    test=*# \d test_redis
      Foreign table "public.test_redis"
     Column | Type | Modifiers | FDW Options
    --------+------+-----------+-------------
     key  | text |  |
     value  | text |  |
    Server: redis_server
    FDW Options: (tabletype 'string', key 'key')
    
    Nun erstelle ich eine normalle Tabelle und einen Trigger, der bei Änderungen (Insert und Update) der normalen Tabelle die Daten nach der Redis-Datenbank kopiert:

    Code:
    test=# create table redis_source (key text, val text);
    CREATE TABLE   
    Time: 4,365 ms   
    test=*# create or replace function redis_update() returns trigger as $$begin insert into test_redis values (new.key, new.val); return new; end; $$language plpgsql;
    CREATE FUNCTION   
    Time: 0,532 ms   
    test=*# create trigger trg_redis after insert or update on redis_source for each row execute procedure redis_update();
    CREATE TRIGGER   
    Time: 0,439 ms   
    test=*# insert into redis_source values ('new_key','new_value');
    INSERT 0 1   
    Time: 0,809 ms   
    test=*# select * from test_redis where key = 'new_key';   
      key  |  value   
    ---------+-----------   
     new_key | new_value   
    (1 row)   
    
    Time: 0,615 ms
    test=*# update redis_source set val = 'hot new val' where key = 'new_key';
    UPDATE 1   
    Time: 0,630 ms   
    test=*# select * from test_redis where key = 'new_key';
      key  |  value   
    ---------+-------------
     new_key | hot new val
    (1 row)
    
    Wenn ich jetzt mit meinem Redis-Client die Redis-DB abfrage, sehe ich:

    Code:
    127.0.0.1:6379> get new_key
    "hot new val"
    
    Das ist nun alles natürlich trivial, hier ist noch kein JSON oder so dabei, aber das kann PostgreSQL ja bekanntermaßen auch perfekt.
    Und so hat man mit PostgreSQL eine robuste 'richtige' SQL-DB, die wunderbar mit NoSQL-Datenbanken wie Redis zusammenarbeiten oder auch ersetzen kann (JSON-Verarbeitung geht in PostgreSQL 9.4 z.T. erheblich schneller als in MongoDB)
     
    Walter gefällt das.
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