Multiple data sources, databases, schemas and replication setup
Using multiple data sources
To use multiple data sources connected to different databases, simply create multiple DataSource instances:
import { DataSource } from "typeorm"
const db1DataSource = new DataSource({
type: "mysql",
host: "localhost",
port: 3306,
username: "root",
password: "admin",
database: "db1",
entities: [__dirname + "/entities/*{.js,.ts}"],
synchronize: true,
})
const db2DataSource = new DataSource({
type: "mysql",
host: "localhost",
port: 3306,
username: "root",
password: "admin",
database: "db2",
entities: [__dirname + "/entities/*{.js,.ts}"],
synchronize: true,
})Using multiple databases within a single data source
To use multiple databases in a single data source, you can specify database name per-entity:
User entity will be created inside secondDB database and Photo entity inside thirdDB database. All other entities will be created in a default database defined in the data source options.
If you want to select data from a different database you only need to provide an entity:
This code will produce following SQL query (depend on database type):
You can also specify a table path instead of the entity:
This feature is supported only in mysql and mssql databases.
Using multiple schemas within a single data source
To use multiple schemas in your applications, just set schema on each entity:
User entity will be created inside secondSchema schema and Photo entity inside thirdSchema schema. All other entities will be created in a default database defined in the data source options.
If you want to select data from a different schema you only need to provide an entity:
This code will produce following SQL query (depend on database type):
You can also specify a table path instead of entity:
This feature is supported only in postgres and mssql databases. In mssql you can also combine schemas and databases, for example:
Replication
You can set up read/write replication using TypeORM. Example of replication options:
With replication slaves defined, TypeORM will start sending all possible queries to slaves by default.
all queries performed by the
findmethods orSelectQueryBuilderwill use a randomslaveinstanceall write queries performed by
update,create,InsertQueryBuilder,UpdateQueryBuilder, etc will use themasterinstanceall raw queries performed by calling
.query()will use themasterinstanceall schema update operations are performed using the
masterinstance
Explicitly selecting query destinations
By default, TypeORM will send all read queries to a random read slave, and all writes to the master. This means when you first add the replication settings to your configuration, any existing read query runners that don't explicitly specify a replication mode will start going to a slave. This is good for scalability, but if some of those queries must return up to date data, then you need to explicitly pass a replication mode when you create a query runner.
If you want to explicitly use the master for read queries, pass an explicit ReplicationMode when creating your QueryRunner;
If you want to use a slave in raw queries, pass slave as the replication mode when creating a query runner:
Note: Manually created QueryRunner instances must be explicitly released on their own. If you don't release your query runners, they will keep a connection checked out of the pool, and prevent other queries from using it.
Adjusting the default destination for reads
If you don't want all reads to go to a slave instance by default, you can change the default read query destination by passing defaultMode: "master" in your replication options:
With this mode, no queries will go to the read slaves by default, and you'll have to opt-in to sending queries to read slaves with explicit .createQueryRunner("slave") calls.
If you're adding replication options to an existing app for the first time, this is a good option for ensuring no behavior changes right away, and instead you can slowly adopt read replicas on a query runner by query runner basis.
Supported drivers
Replication is supported by the MySQL, PostgreSQL, SQL Server, Cockroach, Oracle, and Spanner connection drivers.
MySQL replication supports extra configuration options:
Last updated