From: | Eduardo Morras <emorrasg(at)yahoo(dot)es> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Estructura tipo diccionario o hashset |
Date: | 2016-08-26 10:18:51 |
Message-ID: | 20160826121851.08e05962dd78e637d039d54f@yahoo.es |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On Wed, 24 Aug 2016 13:52:41 +0200
José Hurtado <jhurtadom(at)gmail(dot)com> wrote:
> Hola,
>
> Creo que vendría bien tener algo parecido a:
>
> DECLARE
> dic1 HASHSET(varchar, schema_name.table_name);
> -- format: HASHSET(anytype, anytype)
> ...
> BEGIN
> ...
> ...
> IF (hashset_has_key(dic1, "alfa") THEN
> dic1["alfa"] := (val1, val2)::schema_name.table_name;
> -- O: hashset_update(dic1, "alfa", (val1,
> val2)::schema_name.table_name);
> ELSE
> hashset_add(dic1, "alfa", (val1, val2)::schema_name.table_name);
> END IF;
> ...
> hashset_remove(dic1, "alfa");
>
> ...
> END;
>
> Ahora estoy implementando algo parecido con tablas temporales, pero
> creo que con una estructura así se podrían resolver mejor ciertos
> algoritmos.
... Estrictamente hablando, una tabla de una base de datos es un set o conjunto. Un hashset usa un indice de tipo hash para acceder(leer, borrar, actualizar, crear) a la informacion del set y un diccionario es otro tipo de set. En tu codigo en pg/pl, hashset_add seria el equivalente a un INSERT, hashset_remove a un DELETE, todas la operaciones sobre un set se pueden hacer en sql. La unica diferencia entre tu algoritmo y una tabla normal de postgresql estriba en que quieres usar un hash para acceder a la informacion, pero por debajo postgres usara un btree, con lo que el coste final del algoritmo sera la del btree mas el coste de ejecutar tu codigo. O bien no he entendido que quieres hacer o no creo que vaya a suponer una mejora.
Opciones que se me ocurren:
a) Puedes usar un indice tipo hash en vez de btree en postgres sin embargo tiene sus inconvenientes.
b) Puedes usar arrays en las columnas(https://www.postgresql.org/docs/current/static/arrays.html).
c) Usa una implementacion de hashtable o diccionario (hypertable p.ej) y accede a ella por FDW.
d) Usa plpython, ya tiene tipos de hashtable y diccionario.
e) O como ya te han sugerido, usa Jsonb.
Seguro que hay mas opciones, no obstante, mide el rendimiento de cada una.
> Un saludo.
--- ---
Eduardo Morras <emorrasg(at)yahoo(dot)es>
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda
From | Date | Subject | |
---|---|---|---|
Next Message | Francisco Olarte | 2016-08-26 10:23:55 | Re: Estructura tipo diccionario o hashset |
Previous Message | José Hurtado | 2016-08-26 09:31:19 | Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Ayuda con función... |