[db:标题]

摘要:在VonaJS中实现读写分离,只需提供一组写数据源和一组读数据源。当用户访问后端 API 时,系统会按照规则自动选择写数据源或读数据源,访问相应的数据库,从而分摊压力,提升系统性能
在VonaJS中实现读写分离,只需提供一组写数据源和一组读数据源。当用户访问后端 API 时,系统会按照规则自动选择写数据源或读数据源,访问相应的数据库,从而分摊压力,提升系统性能 安装模块 读写分离作为独立的模块提供,因此需要在VonaJS项目中安装此模块: $ pnpm add vona-module-a-datasharding -w 添加数据源 首先,需要添加一组数据源 1. 添加类型定义 为新数据源添加类型定义 src/backend/config/config/config.ts declare module 'vona-module-a-orm' { export interface IDatabaseClientRecord { read1: never; read2: never; write1: never; write2: never; } } 2. 增加数据源配置 src/backend/config/config/config.ts // database config.database = { clients: { read1: { client: 'pg', connection: { host: '127.0.0.1', port: 5432, user: 'postgres', password: '', database: 'xxxx-read1', }, }, read2: {...}, write1: {...}, write2: {...}, }, }; 配置读写数据源 然后配置模块的读写数据源 src/backend/config/config/config.ts // modules config.modules = { 'a-datasharding': { client: { reads: ['read1', 'read2'], writes: ['write1', 'write2'], randomRead: undefined, randomWrite: undefined, }, }, }; 名称 说明 reads 指定一组读数据源 writes 指定一组写数据源 randomRead 可指定自定义函数,从reads中提取一个读数据源。默认为undefined,由系统随机提取 randomWrite 可指定自定义函数,从writes中提取一个写数据源。默认为undefined,由系统随机提取 读写分离的运行机制 当配置好读写数据源之后,读写分离机制就自动生效了 现在,解释一下读写分离的运行机制: 模块提供了一个全局拦截器a-datasharding:datasharding。该拦截器判断当前 API Method,如果是POST/PATCH/DELETE/PUT,那么就使用写数据源,否则使用读数据源 数据一致性: 缓存写数据源 场景分析:同一个用户 由于数据库同步有延时,会出现数据不一致性的情况。比如,用户访问Write-API,将数据写入写数据库。接下来,用户访问Read-API,此时读数据库还没有同步,那么就会读到旧数据 为了解决以上问题,模块自动提供了一个机制:当用户访问Write-API时,会自动将写数据源存入二级缓存,并设置过期时间。
阅读全文