Citus 7.5 la forma correcta de escalar aplicaciones saas cómo transferir bitcoins a efectivo

Uno de los principales desafíos con la ampliación SaaS aplicaciones es la base de datos. Mientras que puedes fácilmente escala tu aplicación al agregar más servidores, escalar su base de datos es un problema mucho más difícil. Esto es particularmente cierto si su aplicación se beneficia de características de bases de datos relacionales, como transacciones, combinaciones de tablas y restricciones de bases de datos.

Primero, crea dos tablas distribuidas usando la sintaxis estándar de PostgreSQL. CREAR CUADROS de empresas (id bigint NOT NULL, nombre de texto NOT NULL, image_url text, CONSTRAINT pk_company_id PRIMARY KEY (id)); Campañas CREATE TABLE (id bigint NOT NULL, company_id bigint NOT NULL, country_id int NOT NULL, nombre de texto NOT NULL, cost_model text, monthly_budget bigint, created_at marca de tiempo sin zona horaria NOT NULL, CONSTRAINT pk_campaign_company_id PRIMARY KEY (id, company_id), CONSTRAINT fk_campaign_company_id FOREIGN KEY (company_id) REFERENCES companies (id)); SELECCIONAR create_distributed_table (‘companies’, ‘id’); SELECCIONAR create_distributed_table (‘campañas’, ‘company_id’); Claves foráneas para tablas de referencia

Ahora, su aplicación necesita capturar información sobre diferentes países, donde está ejecutando anuncios y campañas. Para eso, creas una pequeña mesa. Esta tabla no está asociada a diferentes inquilinos, por lo que la convertimos en una tabla de referencia. CREATE TABLE countries (id bigint NOT NULL, country_name text NOT NULL, tax_rate numérico NOT NULL, CONSTRAINT pk_country_id PRIMARY KEY (id)); SELECCIONAR create_reference_table (‘countries’);

La tabla de campañas está relacionada con la tabla de países a través de country_id. Para hacer cumplir esa relación, debe crear una restricción de clave externa de la tabla distribuida a la tabla de referencia. Con Citus 7.5, esa restricción se aplica automáticamente para su aplicación. – crear clave externa desde la tabla distribuida a la tabla de referencia – para obtener una sintaxis diferente para crear claves externas, consulte https://stackoverflow.com/questions/28558920/postgresql-foreign-key-syntax ALTER Campañas TABLE AGREGAR RESTRICCIÓN fk_campaign_country_id FOREIGN KEY (country_id) REFERENCES countries (id);

Después de aproximadamente seis meses, la lógica de su aplicación comienza a volverse compleja. En algún momento, comienzas a otorgar créditos promocionales a las empresas. De esta forma, las empresas pueden comenzar ejecutando experimentos gratuitos en su plataforma. Para hacer esto, agrega dos nuevas columnas a la definición de su tabla. ALTER TABLE empresas ADD COLUMN credit_amount bigint; ALTERAR Campañas TABLE ADD COLUMN credits_used boolean;

Citus 7.5 ahora viene con soporte para las sentencias SELECT … FOR UPDATE que operan en los datos de un inquilino. El siguiente bloque de código muestra un ejemplo en SQL. EMPEZAR ; – bloquear filas relacionadas con el saldo de una compañía antes de ejecutar la lógica de la aplicación SELECT * FROM companies DONDE id = 123 PARA ACTUALIZAR; SELECCIONE * FROM campañas WHERE company_id = 123 AND id = 456 PARA ACTUALIZAR; – la aplicación del cliente ahora verifica que hay suficiente crédito disponible ACTUALIZAR las empresas SET credit_amount = credit_amount – 60 WHERE id = 123; ACTUALIZAR campañas SET créditos_utilizados DONDE company_id = 123 AND id = 456; COMPROMETER; Propietario: estadísticas de consultas por cliente (por inquilino)

Para ver a sus clientes más activos y sus consultas, habilite citus_stat_statements. Luego consulta esta tabla. SELECT * FROM citus_stat_statements ORDER BY llamadas LIMIT 3; queryid | ID de usuario | dbid | consulta | ejecutor | partition_key | llamadas ———– + ——– + ——- + ——————– ——————– + ———- + ————— + – —– 462021987 | 19064 | 16385 | INSERT INTO campaign ($ 1, $ 2, $ 3, $ 4) | enrutador | 970 | 9875 660713276 | 19064 | 16385 | INSERT INTO campaign ($ 1, $ 2, $ 3, $ 4) | enrutador | 56 | 66 183740289 | 19064 | 16385 | INSERT INTO campaign ($ 1, $ 2, $ 3, $ 4) | enrutador | 14 | 41

Verá que su inquilino 970 es mucho más activo que otros. Su equipo de ventas llega a este cliente para vender un contrato empresarial. Como parte de este contrato, este cliente desea tener garantías de calidad de servicio. Para proporcionar esas garantías, puede seguir utilizando la función de aislamiento de inquilinos de Citus. Con el aislamiento del inquilino, puede otorgarle a este cliente sus recursos de hardware dedicados. Nivel de fila Seguridad

Para esto, contratas a una nueva persona de apoyo llamada Alice. Utiliza Citus Cloud o Citus Enterprise para crear un nuevo rol para ella. A continuación, configure Seguridad de nivel de fila (RLS) para otorgar a Alice acceso a las campañas de este cliente empresarial. – crear una política con un filtro de columna de distribución – esto permite que Alice solo vea las campañas para el cliente 970 ALTER TABLE campañas ACTIVAR LA SEGURIDAD DEL NIVEL DE FILA; CREAR POLÍTICA support_policy ON campañas TO alice USING (company_id = 970) WITH CHECK (company_id = 970); – permitir que Alice lea y elimine de la tabla de acuerdo con la política GRANT SELECT, DELETE ON TABLE campañas TO alice;

Ahora por un poco de magia. Cuando Alice se conecta con Citus, todas sus consultas obtienen un alcance mágico para ese cliente. Esto se debe a que la política de RLS agrega automáticamente la columna de distribución a la consulta, incluso si Alice no lo hace. – cuando Alice ejecuta una consulta, solo ve pedidos para el inquilino = 970 SELECT id, company_id, name, cost_model, monthly_budget, created_at FROM campañas WHERE monthly_budget > 100000; id | company_id | nombre | cost_model | monthly_budget | created_at —- + ———— + ————– + —————- —– + —————– + ————————– – 53 | 970 | Starfire | cost_per_impression | 103871 | 2017 – 02 – 17 00: 09: 51. 792667 84 | 970 | Cy – Gor | cost_per_impression | 105443 | 2017 – 02 – 17 00: 10: 04. 59091 96 | 970 | Toad Ivy | cost_per_impression | 107429 | 2017 – 02 – 17 00: 10: 15. 098363: Alicia también puede eliminar campañas antiguas de la base de datos. No puede agregar nuevas campañas ni cambiar las existentes. ELIMINAR DE LAS campañas WHERE created_at <= ‘2015-01-01’; ELIMINAR 112 Columnas confidenciales enmascarantes para generar informes

Ahora, vamos a crear una vista de los datos de las campañas. Esta vista oculta la columna de presupuesto mensual. A continuación, otorgamos acceso de lectura a nuestros analistas en esta vista. CREAR VIEW reporting campañas AS SELECT id, company_id, name, cost_model, created_at FROM campañas; USO DE SUBVENCIONES EN SCHEMA informando a los analistas; SELECCIÓN DE SUBVENCIONES EN TODAS LAS TABLAS DE ESQUEMA que informa a los analistas; Integración nativa con extensiones Postgres: HLL y TopN

Postgres tiene dos extensiones que le permiten obtener resultados aproximados inmediatos de los datos subyacentes. HyperLogLog (HLL) proporciona aproximaciones rápidas (distintas). TopN devuelve los valores superiores en la base de datos según algunos criterios. Cuando quería paralelizar cálculos con estas extensiones, previamente tenía que definir una función agregada adicional en Citus.

banner