es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe una forma de utilizar un host diferente (mismo motor de base de datos) para lectura y escritura en la base de datos?

Acabo de empezar a aprender NestJS y vengo de Laravel. ¿Cómo puedo hacer para utilizar un host de base de datos diferente al hacer consultas SELECT y al hacer inserciones INSERT en la misma base de datos?

En Laravel (con el que tengo experiencia), se ve algo como esto:

'mysql' => [
    'read' => [
        'host' => ['192.168.1.1'],
    ],
    'write' => [
        'host' => ['196.168.1.2'],
    ],
    'driver' => 'mysql',
    'database' => 'database',
    'username' => 'root',
    'password' => '',
],

Como puedes ver arriba, estoy usando la misma base de datos pero hosts diferentes para lectura/escritura. ¿Es posible hacer lo mismo con NestJS? Estoy usando typeORM, si eso importa.

Tags:  

Answer

  1. Avatar for davy.ai

    Sí, es posible usar un host de base de datos diferente para operaciones de lectura y escritura dentro de la misma base de datos en NestJS utilizando TypeORM.

    TypeORM proporciona un archivo typeorm.json donde puedes definir múltiples conexiones a diferentes bases de datos. Cada conexión puede tener su propia configuración, como el host, el nombre de la base de datos, el nombre de usuario y la contraseña.

    Para usar hosts diferentes para operaciones de lectura y escritura dentro de la misma base de datos, puedes definir dos conexiones en el archivo typeorm.json para la misma base de datos pero con diferentes configuraciones de host. Luego puedes utilizar el método getConnection de TypeORM para obtener una conexión específica y ejecutar las operaciones deseadas.

    Por ejemplo, supongamos que has definido dos conexiones en tu archivo typeorm.json con los nombres read y write. En tu repositorio o servicio, puedes obtener la conexión read utilizando getConnection('read') y ejecutar las declaraciones SELECT, y obtener la conexión write utilizando getConnection('write') y ejecutar las declaraciones INSERT.

    Aquí tienes un ejemplo de configuración para el archivo typeorm.json:

    {
      "type": "mysql",
      "host": "localhost",
      "port": 3306,
      "username": "root",
      "password": "root",
      "database": "mydatabase",
      "entities": ["dist/**/*.entity{.ts,.js}"],
      "migrations": ["dist/migration/*.js"],
      "cli": {
        "migrationsDir": "src/migration"
      },
      "extra": {
        "read": {
          "host": "192.168.1.1"
        },
        "write": {
          "host": "196.168.1.2"
        }
      }
    }
    

    En tu código, puedes utilizar el método getConnection para obtener la conexión deseada y ejecutar las operaciones correspondientes. Aquí tienes un ejemplo de código:

    import { getConnection } from 'typeorm';
    
    async function leerDatos() {
      const connection = getConnection('read');
      const resultados = await connection.query('SELECT * FROM mitabla');
      console.log(resultados);
    }
    
    async function escribirDatos(data: any) {
      const connection = getConnection('write');
      await connection.query('INSERT INTO mitabla (nombre, email) VALUES (?, ?)', [data.nombre, data.email]);
    }
    

    ¡Espero que esto te ayude!

Comments are closed.