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

网站做跳转辽宁工程建设信息网官网入口

网站做跳转,辽宁工程建设信息网官网入口,住房和城乡建设局,wordpress迁移站点首先还是要给自己的开原框架打个广告 sharding-core 针对efcore 2版本的分表组件#xff0c;首先我们来快速回顾下目前市面上分表下针对分页常见的集中解决方案分表解决方案解决方案skip100skip10000skip10000优点缺点内存分表速度快O(n)#xff0c;nskip*分表数… 首先还是要给自己的开原框架打个广告 sharding-core 针对efcore 2版本的分表组件首先我们来快速回顾下目前市面上分表下针对分页常见的集中解决方案分表解决方案解决方案skip100skip10000skip10000优点缺点内存分表速度快O(n)nskip*分表数速度快O(n)nskip*分表数,内存暴涨O(n)nskip*分表数,内存爆炸,速度越来越慢实现简单,支持分库skip过大内存暴涨union all速度快速度一般死慢死慢的实现简单仅支持同库,不好优化,索引会失效流式分表速度快O(n)nskip速度快O(n)nskipO(n)nskip 速度越来越慢支持分库实现复杂1.内存分页顾名思义就是将各个表的结果集合并到内存中进行排序后分页2.union all使用的是数据库本身的聚合操作,用过匿名表来实现和操作当前表一样无感知3.流式分表和名字一样就是通过next来一次一次获取,和datareader类似只有在next后才可以获取到客户端通过上面的简单对照我们可以清楚地发现,其实我们可以选择的基本上就内存分表和流式分表而已,又以为内存分表的限制其实最优解就是流式分表。上篇文章我们简单的介绍了流式分表这次我们在针对流式分表的原理进行介绍,并且提出针对流式分表下的分页“最优解”。流式分表原理我们先简单的假设一个场景,我们有一个订单表针对订单表我们进行了分表根据订单的创建时间按月分表。如果我们执行 select * from order limit 100,2内存分页在这种情况下如果我们需要分页跳过前 100条记录获取第101-102条记录,现在如果内存分表情况下我们该如何操作流式分页上述就是内存排序的实现,通过上图发现我们需要获取102*3条数据并且进行排序后获取第101和102条数据所以说上述表格里已经体现了内存分表的优劣 那么如果是流式分页我们是如何操作的呢简单解释下这张图,右边为数据库在数据库外面的分别是next了一次的数据,其他数据都是在数据库里面只是结果集有了但是结果还不没有取到client,通过100次next后我们可以取到真实的数据所以对于任何分页都是只需要O(n)的时间复杂度其中nskiptake就是跳过多少条和获取多少条注意不要以为next了100次就是查询了100次数据库,结果集生成后就不会再查询数据库里next可以理解为是对结果集的客户端获取。sharding-core的优化至此流式分表获取数据的原理基本上就是这样,针对这种情况下我们该如何进行对分页数据进行优化,因为上图数据库模块内部的区域是未知的也就是说我们是不知道索引“1”后面的索引“2”和其他语句下的当前索引大小情况,我们只知道索引“1”和索引“2”在本张表里面的排序情况,针对这种情况我们应该是没办法进行程序的优化了,可以理解为目前情况下已经是最优解了。但是如果我们仔细一想可以发现事情并不简单大家能看懂吗我们只需要让程序的获取方式按顺序那么就可以保证性能最佳 O(1)所以针对时间分表或者顺序分表的情况下我们一般情况下使用时间倒序或者顺序,那么就可以告诉程序如何排序,又可以得知,在对应顺序的情况下每张表都是顺序的又因为只要保证如下就可以了有些朋友可能会有疑问,为什么order by id也可以这样,其实order by id是不可以这样的,但是如果你这样又会怎么样?难道数据库用它最优解排序返回是正确,程序用最优解排序返回就不是正确了?sharding-core的优化升阶可能有些喷友认为优化到这里就是差不多了但是其实sharding-core针对优化还不止如此,因为这种排序需要让程序知道以某种情况排序可以按表顺序排序达到性能最优,但是如果我是Id取模或者范围就会导致这个排序仅仅只适合id排序如果需要按别的来排序就没办法了还是得走流式分表.那么该如何优化呢还是一样我们忽略了分页是2步操作这种排序仅仅需要的是第一存在order by 第二告诉系统skip多少后需要启用反排并且该情况适用于任何的分表规则id取模或者别的其他情况都是可以支持的你以为sharding-core的优化结束了吗?sharding-core已经实现了以上所有的解决方案,并且已经在实现第三种优化,就是极不规则情况下的分页,具体就是当表查询坐落到3张表后其中2张表或者1张表的count极少的情况下直接取到内存然后剩余的1张表可以直接通过skiptake获取数据后内存排序,因为时间原因目前还没实现后续会针对这个情况进行实现。以上就是我为大家带来的理论和干货具体的理论听得爽了干货我再发一遍吧 sharding-coresharding-core如何启用高性能分页高性能分页sharding-core本身使用流式处理获取数据在普通情况下和单表的差距基本没有,但是在分页跳过X页后,性能会随着X的增大而减小O(n)目前该框架已经实现了一套高性能分页可以根据用户配置,实现分页功能。支持版本x.2.0.161.如何开启分页配置 比如我们针对用户月新表进行分页配置,先实现IPaginationConfiguration接口,该接口是分页配置接口public class SysUserSalaryPaginationConfiguration:IPaginationConfigurationSysUserSalary{public void Configure(PaginationBuilderSysUserSalary builder){builder.PaginationSequence(o o.Id).UseTailCompare(Comparerstring.Default).UseQueryMatch(PaginationMatchEnum.Owner | PaginationMatchEnum.Named | PaginationMatchEnum.PrimaryMatch);builder.PaginationSequence(o o.DateOfMonth).UseQueryMatch(PaginationMatchEnum.Owner | PaginationMatchEnum.Named | PaginationMatchEnum.PrimaryMatch).UseAppendIfOrderNone(10);builder.PaginationSequence(o o.Salary).UseQueryMatch(PaginationMatchEnum.Owner | PaginationMatchEnum.Named | PaginationMatchEnum.PrimaryMatch).UseAppendIfOrderNone();builder.ConfigReverseShardingPage(0.5d,10000L);}} 2.添加配置在对应的用户月薪路由中添加配置 public override IPaginationConfigurationSysUserSalary CreatePaginationConfiguration(){return new SysUserSalaryPaginationConfiguration();} 3.Configure内部为什么意思?builder.PaginationSequence(o o.Id) 配置当分页orderby 字段为Id时那么分表所对应的表结构为顺序,顺序的规则通过UseTailCompare来设置,其中string为表tail,具体什么意思就是说如果本次分页设计3张表分别是table1,table2,table3,如果我没配置id的情况下那么需要查询3张表然后分别进行流式聚合,如果我配置了id的情况下,如果本次sql查询带上了id作为order by字段那么就不需要分别查询3张表,可以直接查询table1如果table1的count大于你要跳过的页数,假设分页查询先查询多少条,table1:100条,table2:200条,table3:300条如果你要跳过90条获取10条原先的时间就是O(100)现在的时间就是O(10)因为table1跳过了90条还剩余10条;UseQueryMatch是什么意思,这个就是表示你要匹配的规则,是必须是当前这个类下的属性还是说只需要排序名称一样即可,因为有可能select new{}匿名对象类型就会不一样,PrimaryMatch表示是否只需要第一个主要的orderby匹配上就行了,UseAppendIfOrderNone表示是否需要开启在没有对应order查询条件的前提下添加本属性排序,这样可以保证顺序排序性能最优builder.ConfigReverseShardingPage 表示是否需要启用反向排序,因为正向排序在skip过多后会导致需要跳过的数据过多,尤其是最后几页,如果开启其实最后几页就是前几页的反向排序,其中第一个参数表示跳过的因子,就是说skip必须大于分页总total*该因子(0-1的double),第二个参数表示最少需要total多少条必须同时满足两个条件才会开启(必须大于500),并且反向排序优先级低于顺序排序,4.如何使用var shardingPageResultAsync await _defaultTableDbContext.SetSysUserMod().OrderBy(oo.Age).ToShardingPageAsync(pageIndex, pageSize); 注意如果你是按时间排序无论何种排序建议开启并且加上时间顺序排序,如果你是取模或者自定义分表,建议将Id作为顺序排序,如果没有特殊情况请使用id排序并且加上反向排序作为性能优化测试首先我们使用 EFCore.BulkExtensions本机环境 AMD3900X 12核24线程32GDDR4 3200内存 980pro固态 sqlserver2012针对数据进行创建一共近295.5w数据耗时24.2秒其中解析表路由耗时3.4秒,插入到本地20.8秒,实际300w订单肯定要比这个时间长因为测试原因所以创建的订单表字段比较少再不起用高性能分表的情况下我们看下流式分页基本在skip 1w后还是可以保持在500ms,skip2w后虽然内存波动不大但是基本上耗时也有显著增加那么如果开启了高性能分表呢高性能分页直接爆杀有没有如果需要使用请在nuget安装ShardingCore记得勾选预览版本哦安装最新版最后的最后如果本文章对您有帮助请点下推荐,如果本框架对您有帮助请点下start,Thanks♪(ω) github sharding-corehttps://github.com/xuejmnet/sharding-core
http://www.huolong8.cn/news/17163/

相关文章:

  • 网站推广基本方法是简单网页制作模板免费
  • 域名网站注册最划算重庆建设部网站
  • 湘潭网站建设方案案例怎样用dw做 网站首页
  • 做直播网站收费吗下载网站系统源码
  • 网站用户粘度重要的龙岗网站建设
  • 哪个公司做网站建设好hao123主页下载安装
  • 高邮网站建设永久云服务器免费领
  • 网站后台更新后主页没有变化muiteer主题 wordpress
  • 外贸网站哪家好建电子商务网站需要多少钱
  • 西安做网站广告的公司网页版梦幻西游金色伙伴推荐
  • 怎么做自己的销售网站app推广刷量
  • 专做商品折扣的网站wordpress google字体删除
  • 溧阳市建设局网站6婚纱摄影 网站关键词 优化
  • 汕头网站搭建公积金网站建设方案
  • 哪个网站做国内销海外的dede网站管理系统演示
  • 网站建设专项检查织梦 xml网站地图
  • 陕西网站建设哪家专业wordpress阿里云虚拟主机安装教程
  • 两学一做网站答题网址佛山网站设计模板
  • 苏州网站建设在哪里公司做两个网站有影响吗
  • 建筑网站设置工资单人换了怎么换官网建设费用怎么算
  • 简述网站制作的一般流程艺术家个人网站设计
  • 国际贸易网站哪家好前端程序员需要掌握哪些基本技术
  • 婚纱网站建设微信群动漫制作专业在国企
  • 效果型网站建设wordpress整合dplayer插件
  • 外贸网站怎么做站长之家查询域名
  • 简洁网站欣赏成都市建筑设计研究院有限公司
  • 论坛类网站如何备案搜索推广是什么
  • 网站开发的形式有( )怎么仿制网站
  • 上海自助建站手机网站不收录
  • 外贸一般在哪些网站凡客诚品商品来源