Su guía para la implementación de PostgreSQL y sistemas multiusuario basados en esquemas by@radioactive
5,278 lecturas

Su guía para la implementación de PostgreSQL y sistemas multiusuario basados en esquemas

2021/03/19
3 min
por @radioactive 5,278 lecturas
tldt arrow
ES
Read on Terminal Reader

Demasiado Largo; Para Leer

Multiusuario es una arquitectura de software en la que una única instancia del software se ejecuta en un servidor y sirve a varios usuarios. El caso de uso más común para los sistemas multiusuario son las aplicaciones basadas en SaaS, que utilizan diferentes niveles de aislamiento de datos según el dominio de la aplicación. En tiempo de ejecución, las solicitudes se redirigen a esquemas específicos en la misma base de datos para proporcionar aislamiento de datos a los arrendatarios. Aquí vamos a hablar sobre un tipo específico de multiusuario y cómo lo implementa exactamente Postgres.

Company Mentioned

Mention Thumbnail
featured image - Su guía para la implementación de PostgreSQL y sistemas multiusuario basados en esquemas
Varun Sharma HackerNoon profile picture

@radioactive

Varun Sharma

Software engineer | Reader | Writer

Aprender Mas
LEARN MORE ABOUT @RADIOACTIVE'S EXPERTISE AND PLACE ON THE INTERNET.
react to story with heart

Antes de sumergirnos en el tema principal de este artículo, primero hablemos un poco sobre lo que es el arrendamiento múltiple. Según Wikipedia,

"El término " software multiusuario " se refiere a una arquitectura de software en la que una sola instancia del software se ejecuta en un servidor y atiende a múltiples usuarios. Un usuario es un grupo de usuarios que comparten un acceso común con privilegios específicos a la instancia de software. "

El caso de uso más común para los sistemas multiusuario son las aplicaciones basadas en SaaS, que utilizan diferentes niveles de aislamiento de datos según el dominio de la aplicación.

Supongamos que tiene un producto que desea proporcionar a varias organizaciones para que sus usuarios puedan iniciar sesión en la plataforma y utilizar el servicio.

La solución más simple sería copiar su código base para cada organización e implementarlos por separado. Parece intuitivo pero difícil de mantener, ya que hay una sobrecarga de administrar múltiples servidores.

Siempre que su equipo de desarrollo necesite agregar una nueva función, debe seguir una serie de implementaciones. Con una arquitectura multiinquilino , este problema podría abordarse fácilmente, lo que daría como resultado una base de código coherente, ya que ahora el equipo tiene que mantener una única base de código. De acuerdo con nuestro ejemplo, los inquilinos podrían ser las organizaciones que utilizan nuestro producto.

Hay varias arquitecturas que se pueden seguir para lograr la tenencia múltiple en la capa de la base de datos, que incluyen:

  • Base de datos separada por inquilino
  • Esquema separado por inquilino
  • Esquema compartido para inquilinos

Hay toneladas de artículos disponibles en Internet para ayudar a comprender el concepto de tenencia múltiple. Aquí vamos a hablar sobre un tipo específico de multiusuario, es decir, multiusuario basado en esquemas, y cómo lo implementa exactamente PostgreSQL.

En este tipo de arrendamiento múltiple, creamos varios esquemas en la misma base de datos para brindar aislamiento de datos a los arrendatarios. En tiempo de ejecución, según los criterios para resolver el arrendatario, las solicitudes se redirigen al esquema específico. Podría haber varias formas de hacerlo, por ejemplo, subdominios únicos, etc.

Sin hablar mucho, encendamos la terminal y veamos cómo funciona.

Abra la consola de Postgres

 psql postgres
image

Cree una nueva base de datos usando el siguiente comando

 CREATE database test;

Echa un vistazo a la ruta de búsqueda de esquemas

 SHOW search_path;
image

Esta ruta de búsqueda determina qué esquemas se examinarán para buscar una tabla o relación de izquierda a derecha y el conjunto de resultados se devolverá en función de la tabla que se encuentre primero.

Ahora, creemos un nuevo arrendatario o, en términos de Postgres, un nuevo esquema.

 CREATE schema tenant_one;

Para cambiar al nuevo esquema, modifiquemos la ruta de búsqueda del esquema.

 SET search_path TO tenant_one, public;

Crear una nueva tabla para los usuarios ahora

 CREATE table users (name varchar, age int);

Puede listar las tablas usando los siguientes comandos.

 \dt

Esto enumerará todas las tablas en el esquema actual.

image

Bien, ahora, creemos otro esquema y cambiemos a él.

 CREATE schema tenant_two; SET search_path TO tenant_two, public;

Haz una lista de las tablas.

 \dt
image

Como puede ver, no hay tablas aquí, es posible que se pregunte a dónde fue la tabla de usuarios que creamos anteriormente. Reside bajo el esquema de inquilino_uno y actualmente nuestra ruta de búsqueda está configurada para buscar solo en el esquema de inquilino_dos y público.

Vamos a crear una nueva tabla aquí también.

 CREATE table users (name varchar, age int);

Ahora, deberíamos poder ver la tabla de usuarios.

 \dt
image

Avancemos y creemos un nuevo registro en la tabla de usuarios.

 Insert into users values ('tenant_two user', 21 );

Enumere el registro que acabamos de crear.

 Select * from users;
image

Vuelva a modificar la ruta de búsqueda del esquema y cambie a tenant_one para obtener la lista de usuarios.

 SET search_path TO tenant_one, public; Select * from users;
image

El registro que creamos anteriormente no se muestra porque actualizamos la ruta de búsqueda del esquema.

 Insert into users values ('tenant_one_user', 22 ) Select * from users;

Deberíamos poder obtener la lista ahora.

image

Siéntase libre de actualizar la ruta del esquema y jugar.

¿Qué sucede si ambos esquemas están presentes en la ruta de búsqueda?

En este caso, Postgres nos dará los resultados del esquema en el que se encuentra la tabla primero de izquierda a derecha.

 SET search_path TO public, tenant_one, tenant_two; Select * from users;
image

Como puede ver, el usuario de tenant_one es la lista de registros. Modifiquemos la ruta de búsqueda nuevamente y verifiquemos los resultados.

 SET search_path TO tenant_two, public, tenant_one; Select * from users;
image

Esta vez, aparece el usuario de inquilino_dos, ya que la relación se encontraría primero en inquilino_dos y se devuelve el conjunto de resultados.

Esta fue una idea básica de cómo se realizan las búsquedas basadas en esquemas. Hay muchas bibliotecas disponibles que brindan soporte para manejar múltiples inquilinos en su aplicación. Si eres del mundo Ruby, te recomiendo que visites la joya Apartment . Puede especificar si desea utilizar el arrendamiento múltiple basado en esquemas o crear una base de datos separada por arrendatario según la base de datos subyacente con la que se comunique su aplicación.

También publicado en: https://iamradioactive.medium.com/schema-based-multi-tenancy-with-postgres-3438a0403b2e

HISTORIAS RELACIONADAS

L O A D I N G
. . . comments & more!
Hackernoon hq - po box 2206, edwards, colorado 81632, usa