key value

Lisa_4

Neuer Benutzer
Beiträge
1
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 bearbeitet von einem Moderator:
Werbung:
Werbung:
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

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)
 
Zurück
Oben