mirror of
https://github.com/n8n-io/n8n.git
synced 2026-06-02 01:37:07 +02:00
When we upgrade typeorm in #5151, we switched from no pooling to a default pool-size of 10. This somehow significantly deteriorates the performance of queries when the application is under load.
79 lines
2.8 KiB
TypeScript
79 lines
2.8 KiB
TypeScript
import path from 'path';
|
|
import { Container } from 'typedi';
|
|
import type { SqliteConnectionOptions } from 'typeorm/driver/sqlite/SqliteConnectionOptions';
|
|
import type { PostgresConnectionOptions } from 'typeorm/driver/postgres/PostgresConnectionOptions';
|
|
import type { MysqlConnectionOptions } from 'typeorm/driver/mysql/MysqlConnectionOptions';
|
|
import { InstanceSettings } from 'n8n-core';
|
|
|
|
import { entities } from './entities';
|
|
import { mysqlMigrations } from './migrations/mysqldb';
|
|
import { postgresMigrations } from './migrations/postgresdb';
|
|
import { sqliteMigrations } from './migrations/sqlite';
|
|
import type { DatabaseType } from '@db/types';
|
|
import config from '@/config';
|
|
|
|
const entitiesDir = path.resolve(__dirname, 'entities');
|
|
|
|
const getDBConnectionOptions = (dbType: DatabaseType) => {
|
|
const entityPrefix = config.getEnv('database.tablePrefix');
|
|
const migrationsDir = path.resolve(__dirname, 'migrations', dbType);
|
|
const configDBType = dbType === 'mariadb' ? 'mysqldb' : dbType;
|
|
const connectionDetails =
|
|
configDBType === 'sqlite'
|
|
? {
|
|
database: path.resolve(
|
|
Container.get(InstanceSettings).n8nFolder,
|
|
config.getEnv('database.sqlite.database'),
|
|
),
|
|
enableWAL: config.getEnv('database.sqlite.enableWAL'),
|
|
}
|
|
: {
|
|
database: config.getEnv(`database.${configDBType}.database`),
|
|
username: config.getEnv(`database.${configDBType}.user`),
|
|
password: config.getEnv(`database.${configDBType}.password`),
|
|
host: config.getEnv(`database.${configDBType}.host`),
|
|
port: config.getEnv(`database.${configDBType}.port`),
|
|
};
|
|
return {
|
|
entityPrefix,
|
|
entities: Object.values(entities),
|
|
migrationsTableName: `${entityPrefix}migrations`,
|
|
cli: { entitiesDir, migrationsDir },
|
|
...connectionDetails,
|
|
};
|
|
};
|
|
|
|
export const getOptionOverrides = (dbType: 'postgresdb' | 'mysqldb') => ({
|
|
database: config.getEnv(`database.${dbType}.database`),
|
|
host: config.getEnv(`database.${dbType}.host`),
|
|
port: config.getEnv(`database.${dbType}.port`),
|
|
username: config.getEnv(`database.${dbType}.user`),
|
|
password: config.getEnv(`database.${dbType}.password`),
|
|
});
|
|
|
|
export const getSqliteConnectionOptions = (): SqliteConnectionOptions => ({
|
|
type: 'sqlite',
|
|
...getDBConnectionOptions('sqlite'),
|
|
migrations: sqliteMigrations,
|
|
});
|
|
|
|
export const getPostgresConnectionOptions = (): PostgresConnectionOptions => ({
|
|
type: 'postgres',
|
|
...getDBConnectionOptions('postgresdb'),
|
|
schema: config.getEnv('database.postgresdb.schema'),
|
|
poolSize: config.getEnv('database.postgresdb.poolSize'),
|
|
migrations: postgresMigrations,
|
|
});
|
|
|
|
export const getMysqlConnectionOptions = (): MysqlConnectionOptions => ({
|
|
type: 'mysql',
|
|
...getDBConnectionOptions('mysqldb'),
|
|
migrations: mysqlMigrations,
|
|
});
|
|
|
|
export const getMariaDBConnectionOptions = (): MysqlConnectionOptions => ({
|
|
type: 'mariadb',
|
|
...getDBConnectionOptions('mysqldb'),
|
|
migrations: mysqlMigrations,
|
|
});
|