paint-brush
Su guía para la implementación de PostgreSQL y sistemas multiusuario basados en esquemaspor@radioactive
19,083 lecturas
19,083 lecturas

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

por Varun Sharma3m2021/03/19
Read on Terminal Reader
Read this story w/o Javascript

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

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

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;

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.

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

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

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;

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;

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.

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;

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;

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