当前位置: 首页 > news >正文

Ajax与JSON的一些总结

旅毁蜒蜗使用装饰器启用事务

import { Database } from 'vona-module-a-orm';

class ServicePost {

@Database.transaction()

async transaction() {

// insert

const post = await this.scope.model.post.insert({

title: 'Post001',

});

// update

await this.scope.model.post.update({

id: post.id,

title: 'Post001-Update',

});

}

}

手工启用事务

1. 使用当前数据源

class ServicePost {

async transactionManually() {

const db = this.bean.database.current;

await db.transaction.begin(async () => {

await this.scope.model.post.update({ id: 1, title: 'Post001_Update' });

});

}

}

2. 使用指定数据源

class ServicePost {

async transactionManually() {

const db = this.bean.database.getDb({ clientName: 'default' });

await db.transaction.begin(async () => {

const modelPost = this.scope.model.post.newInstance(db);

await modelPost.update({ id: 1, title: 'Post001_Update' });

});

}

}

事务参数

class ServicePost {

@Database.transaction({

+ isolationLevel: 'READ_COMMITTED',

+ propagation: 'REQUIRED'

})

async transaction() {

...

}

}

class ServicePost {

async transactionManually() {

const db = this.bean.database.getDb({ clientName: 'default' });

await db.transaction.begin(

async () => {

...

},

{

+ isolationLevel: 'READ_COMMITTED',

+ propagation: 'REQUIRED',

}

);

}

}

事务参数:isolationLevel

名称 说明

DEFAULT 数据库相关的缺省isolationLevel

READ_UNCOMMITTED

READ_COMMITTED

REPEATABLE_READ

SERIALIZABLE

SNAPSHOT

事务参数:propagation

Vona ORM 支持数据库事务传播机制

名称 说明

REQUIRED 默认的事务传播级别。如果当前存在事务, 则加入该事务。如果当前没有事务, 则创建一个新的事务

SUPPORTS 如果当前存在事务,则加入该事务. 如果当前没有事务, 则以非事务的方式继续运行

MANDATORY 强制性。如果当前存在事务, 则加入该事务。如果当前没有事务,则抛出异常

REQUIRES_NEW 创建一个新的事务。如果当前存在事务, 则把当前事务挂起。也就是说不管外部方法是否开启事务,总是开启新的事务, 且开启的事务相互独立, 互不干扰

NOT_SUPPORTED 以非事务方式运行。如果当前存在事务,则把当前事务挂起(不用)

NEVER 以非事务方式运行。如果当前存在事务,则抛出异常

事务补偿机制

当事务成功或者失败时执行一些逻辑

1. 成功补偿

this.bean.database.current.commit(async () => {

// do something when success

});

2. 失败补偿

this.bean.database.current.compensate(async () => {

// do something when failed

});

事务与Cache数据一致性

许多框架使用最简短的用例来证明是否高性能,而忽略了业务复杂性带来的性能挑战。随着业务的增长和变更,项目性能就会断崖式下降,各种优化补救方案让项目代码繁杂冗长。而 Vona 正视大型业务的复杂性,从框架核心引入缓存策略,并实现了二级缓存、Query缓存和Entity缓存等机制,轻松应对大型业务系统的开发,可以始终保持代码的优雅和直观

Vona 系统对数据库事务与缓存进行了适配,当数据库事务失败时会自动执行缓存的补偿操作,从而让数据库数据与缓存数据始终保持一致

针对这个场景,Vona 提供了内置的解决方案

1. 使用当前数据源

class ServicePost {

@Database.transaction()

async transaction() {

// insert

const post = await this.scope.model.post.insert({

title: 'Post001',

});

// cache

await this.scope.cacheRedis.post.set(post, post.id);

}

}

当新建数据后,将数据放入 redis 缓存中。如果这个事务出现异常,就会进行数据回滚,同时缓存数据也会回滚,从而让数据库数据与缓存数据保持一致

2. 使用指定数据源

class ServicePost {

async transactionManually() {

const db = this.bean.database.getDb({ clientName: 'default' });

await db.transaction.begin(async () => {

const modelPost = this.scope.model.post.newInstance(db);

const post = await modelPost.insert({ title: 'Post001' });

await this.scope.cacheRedis.post.set(post, post.id, { db });

});

}

}

http://www.jsqmd.com/news/449925/

相关文章:

  • 基于高频方波电流注入法的永磁同步电机无感FOC控制算法研究与实践:零低速无传感器控制、快速响应...
  • C#嵌入x汇编——一个GPIO接口的实现
  • Fish Li 的一年博客总结
  • javascript 设计模式 - 文章很长,请自备瓜子,水果和眼药水
  • 逃脱Asp.Net MVC框架/枷锁,使用Razor视图引擎
  • 我为啥喜欢WinPhone
  • 跟小静读CLR via C#()--泛型
  • AI管道缺陷识别数据集 水下管道智能识别 管道缺陷识别 管道油污碎屑检测 地下管道侧向识别 管道根系侵入数据集 表面损伤数据集 破裂管道识别 破裂图像数据集-目标检测图像数据集第10112期
  • ASP.NET MVC关于生成纯静态后如何不再走路由直接访问静态页面
  • SQL Server 中的ColumnStore Index尝试
  • SQL Server中的Merge关键字
  • 作为Web开发人员,我为什么喜欢Google Chrome浏览器
  • 用JSON做数据传输格式中的一些问题总结
  • 《梁深浔计算机科学讲义》
  • 非常好玩的C#/.NET 基础 -- 安全有效引发事件
  • 菜鸟CLR VIA C#之旅():品味细节,CLR的执行模型
  • 江湖救急!今天聊个硬核实战技巧——用哈里斯鹰算法给LSSVM模型调参,手把手教你玩转多变量预测模型。这玩意儿在设备寿命预测、股票价格拟合场景贼好用,直接上干货
  • 所见即所得富文本编辑器实现原理
  • P1650 [ICPC 2004 Shanghai R] 田忌赛马(同洛谷2587)
  • 我心目中的Asp.net核心对象
  • 2026年靠谱喷淋清洗机源头厂家排行,给你清洗新选择,滚筒输送机/链板输送机/清洗机网带/料斗提升机,清洗机品牌哪里有卖 - 品牌推荐师
  • 菜鸟CLR VIA C#之旅—开始旅行:千里之行始于足下
  • 微软预览技术 大幅简化无障碍网站键盘导航开发
  • 在.net中读写config文件的各种方法
  • 分布式日志收集系统: Facebook Scribe
  • 程序员职业发展的绊脚石-思想的枷锁
  • 选河南种子会要考虑啥,对接会效果是否有保障 - 工业推荐榜
  • 通知监控系统框架:Python + API + Email + Docker + GitHub Actions + Prometheus
  • 2026年天津继承律师电话查询推荐:解决继承难题指南 - 品牌推荐
  • 擦亮自己的眼睛去看SQLServer之谈谈锁机制