惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 大石头

[NewLife.XCode]备份恢复与同步(数据搬运专家) [NewLife.XCode]实体队列(多线程生产的大数据集中保存) [NewLife.XCode]批量添删改操作(提升吞吐率) [NewLife.Net]单机400万长连接压力测试 - 大石头 [NewLife.XCode]高级统计(数据报表利器) - 大石头 [NewLife.XCode]分表分库(百亿级大数据存储) [NewLife.XCode]导入导出(实体对象百变魔君) [NewLife.XCode]角色权限 [NewLife.XCode]实体工厂(拦截处理实体操作) [NewLife.XCode]百亿级性能 - 大石头 [NewLife.XCode]对象字典缓存(百万军中取敌首级) [NewLife.XCode]实体列表缓存(最土的方法实现百万级性能) - 大石头 [NewLife.XCode]数据层缓存(网站性能翻10倍) [NewLife.XCode]高级查询(化繁为简、分页提升性能) - 大石头 [NewLife.XCode]扩展属性(替代多表关联Join提升性能) - 大石头 [NewLife.XCode]增量累加 [NewLife.XCode]脏数据 [NewLife.XCode]高级增删改 [NewLife.XCode]数据初始化
[NewLife.XCode]事务处理(算准你的每一分钱)
大石头 · 2019-04-01 · via 博客园 - 大石头

NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。

整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中,代表作有百亿级大数据实时计算项目。

开源地址:https://github.com/NewLifeX/X (求star, 743+)

为什么需要事务

事务,通俗来讲,同时干几件事,要么一起成功,要么一起失败

一个比较古老的事务处理案例,(在2002年前后比较常见),就是转账:

  • A给B转账100元,先在A账户减100元,然后在B账号加100元,如果A减成功而B加失败,那么就会数据不一致
  • A给B转账100元,先在B账户加100元,然后在A账号减100元,如果B加成功而A减失败,同样有问题

此时,需要一个事务把两个操作包含起来,伪代码如下:

begin;
    A-=10;
    B+=10;
    commit;
exception
    rollback;
end

这里用白话解释了为什么需要事务,至于事务的原理,绝大部分开发者用不到,感兴趣者可以自行搜索学习。

事务用法

1,最老的用法。从实体类元数据开始

UserX.Meta.BeginTrans();
try
{
    //todo
    UserX.Meta.Commit();
}
catch
{
    UserX.Meta.Rollback();
    throw;
}

2,基于连接的用法。实体类事务实质上是在连接上开事务,因此同一个连接的多个实体类,不管用哪一个开事务效果都是一样的

var dal = UserX.Meta.Session.Dal;
dal.BeginTransaction();
try
{
    //todo
    dal.Commit();
}
catch
{
    dal.Rollback();
    throw;
}

3,最先进的用法。未提交而离开作用域时执行回滚,还支持多个不同数据库同时打开事务

using (var tran1 = UserX.Meta.CreateTrans())
using (var tran2 = Role.Meta.CreateTrans())
{
    //todo

    tran1.Commit();
    tran2.Commit();
}

在业务代码里面,如果有问题直接抛出异常或者return跳出作用域即可

事务对自增的影响

在向带有自增的表插入数据时,如果因事务失败而导致回滚,则已“占用”的自增序数不会归还,导致数据库数据的自增数看起来有“断层”的感觉。

系列教程

NewLife.XCode教程系列[2019版]

  1. 增删改查入门。快速展现用法,代码配置连接字符串
  2. 数据模型文件。建立表格字段和索引,名字以及数据类型规范,推荐字段(时间,用户,IP)
  3. 实体类详解。数据类业务类,泛型基类,接口
  4. 功能设置。连接字符串,调试开关,SQL日志,慢日志,参数化,执行超时。代码与配置文件设置,连接字符串局部设置
  5. 反向工程。自动建立数据库数据表
  6. 数据初始化。InitData写入初始化数据
  7. 高级增删改。重载拦截,自增字段,Valid验证,实体模型(时间,用户,IP)
  8. 脏数据。如何产生,怎么利用
  9. 增量累加。高并发统计
  10. 事务处理。单表和多表,不同连接,多种写法
  11. 扩展属性。多表关联,Map映射
  12. 高级查询。复杂条件,分页,自定义扩展FieldItem,查总记录数,查汇总统计
  13. 数据层缓存。Sql缓存,更新机制
  14. 实体缓存。全表整理缓存,更新机制
  15. 对象缓存。字典缓存,适用用户等数据较多场景。
  16. 百亿级性能。字段精炼,索引完备,合理查询,充分利用缓存
  17. 实体工厂。元数据,通用处理程序
  18. 角色权限。Membership
  19. 导入导出。Xml,Json,二进制,网络或文件
  20. 分表分库。常见拆分逻辑
  21. 高级统计。聚合统计,分组统计
  22. 批量写入。批量插入,批量Upsert,异步保存
  23. 实体队列。写入级缓存,提升性能。
  24. 备份同步。备份数据,恢复数据,同步数据
  25. 数据服务。提供RPC接口服务,远程执行查询,例如SQLite网络版
  26. 大数据分析。ETL抽取,调度计算处理,结果持久化