请选择 进入手机版 | 继续访问电脑版

DBHub的前世今生

[复制链接]
滚雪球少年 发表于 2021-1-2 19:42:41 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
1 为什么会做这个组件

我们开发质料管理系统的时候,有大量的增删改查操纵场景,特别是对质料明细量表举行操纵的时候,我们遇到了一些问题:

  • 如果用户每输入一行信息就执行一次数据库读写的话,古老的ADO.NET组件执行效率不高;
  • 数据库毗连反复开关,而且在多用户并发操纵的情况下表出现锁辩说;
  • SQL语句拼接工作量大,完全属于无技能含量的体力劳动;
做这个组件的最主要初志并不是筹划对性能举行革命性的提升,因为用的照旧ADO.NET,我最主要的想法是为了偷懒,把拼接sql语句的工作封装起来,用一个标准化的方法来剖析和组装sql语句,并直接执行返回效果,我的目的是:

  • 所有的增删改都不再需要写SQL语句;
  • 所有的数据批量增删改操纵在一次数据库毗连打开关闭内完成;
谁人时候.NET虽然有ORM组件,但是在数据批量处置惩罚时本事弱,一冲动就自己造了个轮子。
2 组件的设计思路

DBHub的作用是为了方便地将数据集(以下简称dt)批量写入或更新到数据表,这个写入一般就是单纯的insert操纵,更新则包罗了两个寄义,一是数据记载的某些非主键字段值发生了变革,这个是update操纵,二是数据记载被删除了,这个是delete操纵。现在就要管理一个问题,我们如何用最方便的方式告诉系统所有这些操纵的内容。
2.1 下面先界说两个概念:


  • 目的数据集dt:对参照系数据集ds颠末加工后成为我们盼望得到的效果数据集;
  • 参照系数据集ds:数据库表原始内容大概原始内容的子集;
2.2 使用者要做的事情是:


  • 把数据集按照表结构组装起来,并在内存中处置惩罚成目的数据集dt;
  • 在数据表中查询出参照系数据集ds;
  • 把dt和ds交给DBHub,剩下的事情由DBHub全部搞定(帮我们把表中ds加工成dt)。
2.3 设计图


2.4 设计思路:

DBHub的焦点思想就是把对SQL的拼接处置惩罚改成对DataTable对象的处置惩罚,有一点ORM的思想在内里,毕竟DataTable对象也可以明确为就是一个Dto对象,我们根据业务逻辑把dt加工好,使得dt变成最终制品的样子,然后去数据库里取参照系数据集ds,这个ds大概是整张表,也大概是整张表的子集,DBHub负责封装标准的方法,将ds加工成dt的样子。
ds我们不要明确是一个独立的表大概是数据对象,他就是我们盼望修改的数据表全部数据大概是一部分数据形成的子集在这个数据表上的投影。
为什么需要ds的子集,因为ds有大概非常大,DBHub对dt举行加工的时候必不可少需要对参照系ds举行遍历和取值,如果ds超等大,那遍历的速度可想而知,这也就是为什么要设计一个filter参数的原因。
早期.NET的ORM处置惩罚批量数据的性能不理想,有一些第三方的数据长期层框架,但是用起来好复杂,于是我下刻意自己造了这个土轮子,现在ORM性能已经越来越好,不外DBHub在一些特定场景(同时存在插入、修改和删除操纵的大批量数据)体现依然稳定,而且使用Bulk方法,所以数据写入速度非常快(号称百万行数据秒级写入)。
2.5 功能和特性:


  • 将所有对数据表的增删改操纵通过对dt的处置惩罚一次性更新到数据表;
  • 对主键已经存在的数据可以通过参数开关决定是接纳略过大概更新的方式来处置惩罚;
  • 可以通过过滤器参数,缩小参照系数据集ds,提升DBHub成员方法内部数据处置惩罚的性能;
  • 判定送入的dt与数据表结构是否一致,提示缺少的字段大概多出的字段;
  • 支持多个字段是主键;
  • 判定主键是否一致;
3 规划

希望实现对多种主流关系型数据库的适配,使DBHub成为一个通用型组件,但是难度照旧非常大的,根本上需要完全重写。这个Flag我不想立了,前路太漫漫,随时大概一去不回,就让我们随遇而安吧。

来源:https://blog.csdn.net/xiangcns/article/details/112002113
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )