回到目录

最近总遇到大数据的问题,一次性处理几千万数据不实际,所以,我们需要对大数据进行分块处理,或者叫分页处理,我在EF架构里曾经写过类似的,那是在进行BulkInsert时,对大数据批量插入时候用到的,现在我把它拿出来,放在IQueryableExtensions类中,即它将作为IQueryable的一个扩展出现,我们可以把这个分页处理的逻辑应用的更加广泛,并且,在这个整理中,提供了异步并行版本,它比同版版本快了几十倍之多,可以说,当前的服务器,只有使用了并且计算之后,才能发挥它的作用!

       /// <summary>
/// 并行分页处理数据,提高系统利用率,提升系统性能
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <param name="item"></param>
/// <param name="method"></param>
public async static Task DataPageProcessAsync<T>(
      IQueryable<T> item,
      Action<IEnumerable<T>> method) where T : class
{
await Task.Run(() =>
{
DataPageProcess<T>(item, method);
});
} /// <summary>
/// 在主线程上分页处理数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="item"></param>
/// <param name="method"></param>
public static void DataPageProcess<T>(
      IQueryable<T> item,
      Action<IEnumerable<T>> method) where T : class
{
if (item != null && item.Count() > )
{
var DataPageSize = ;
var DataTotalCount = item.Count();
var DataTotalPages = item.Count() / DataPageSize;
if (DataTotalCount % DataPageSize > )
DataTotalPages += ; for (int pageIndex = ; pageIndex <= DataTotalPages; pageIndex++)
{
var currentItems = item.Skip((pageIndex - ) * DataPageSize).Take(DataPageSize).ToList();
method(currentItems);
}
}
}

事实上,有了上面的方法,以后在进行分面处理数据时,只要有IQueryable的结果集和要处理的方法传进来就可以了,方便至极!

下面代码是选自我的FastSocket项目,对大数据进行传输时,使用的代码

            #region 分页数据传输
DataPageProcessAsync(model, (list) =>
{
client.Send("DSSInsert"
,
,
, item.Name//VersionHelper.GetNumber(ProjectID.NewLearningBar)
, SerializeMemoryHelper.SerializeToBinary(list)
, res => res.Buffer).ContinueWith(c =>
{
if (c.IsFaulted)
{
throw c.Exception;
}
Console.WriteLine(BitConverter.ToBoolean(c.Result, ));
});
});
#endregion

我自己试了同步方法DataPageProcess和并行异步方法DataPageProcessAsync,后都比较前者至少要快几十倍,当然这和你的CPU有关,你的CPU处理的线程数超多,这个倍数将会越大!

回到目录

EF架构~扩展一个分页处理大数据的方法的更多相关文章

  1. Web网站架构演变—高并发、大数据

    转 Web网站架构演变—高并发.大数据 2018年07月25日 17:27:22 gis_morningsun 阅读数:599   前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系 ...

  2. FusionInsight,一个融合的大数据平台

    随着物联网技术和应用的普及,以运营商.互联网以及实体经济行业为代表的企业产生了越来越多的数据,大数据的发展越来越蓬勃. 从2007年开始,大数据应用成为很多企业的需求,2012年兴起并产生了大数据平台 ...

  3. 采用Kettle分页处理大数据量抽取任务

    作者:Grey 原文地址: http://greyzeng.com/2016/10/31/big-data-etl/ 需求: 将Oracle数据库中某张表历史数据导入MySQL的一张表里面. 源表(O ...

  4. MySQL分页查询大数据量优化方法

    方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N适应场景: 适用于数据量较少的情况(元组百/千级)原因/缺点: ...

  5. 【大数据系统架构师】1.2 大数据基础Hadoop 2.X

    1. hadoop环境搭建 1.1 伪分布式环境搭建 1.1.1 伪分布式环境搭建 1.1.2 伪分布式搭建结果 hdfs可视化界面: http://od001:50070/dfshealth.htm ...

  6. Oracle 大数据查询优化方法

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  7. SQLServer大数据优化方法若干

    1.使用ndf文件. 自从sqlserver2005后,默认不增生成ndf文件. mdf:priMary Data file ldf:Log Data File ndf:secoNdary data ...

  8. SQL Server 快速大数据排序方法

    SQL Server 中虽然有 ORDER BY NewID() 方法,但对于数据量比较大的结果集来说,排序那慢的可不是一星半点. 微软官方给了一种方案,https://msdn.microsoft. ...

  9. Socket接收大数据的方法

    byte[] buffer = new byte[BufferSize]; int bytesRead; // 读取的字节数 MemoryStream msStream = new MemoryStr ...

随机推荐

  1. [转]SQL Server字符串处理函数大全

    select语句中只能使用sql函数对字段进行操作(链接sql server), select 字段1 from 表1 where 字段1.IndexOf("云")=1;这条语句不 ...

  2. Spring aop 原始的工作原理的理解

    理解完aop的名词解释,继续学习spring aop的工作原理. 首先明确aop到底是什么东西?又如何不违单一原则并实现交叉处理呢? 如果对它的认识只停留在面向切面编程,那就脏了.从oop(Objec ...

  3. gc roots 垃圾回收

    gc roots包括以下几个: 虚拟机栈(栈桢中的本地变量表)中的引用对象 方法区中的类静态属性引用的对象 方法区中的常量引用的对象 本地方法栈中JNI(即native方法)的引用的对象 java,c ...

  4. Win7 64位 VS2015环境编译NanoVG

    书接上回,Cairo编译好使用后,发现简单的每帧画100条随机线段就卡得不行,装了个gooreplacer( http://liujiacai.net/gooreplacer/ )上stackover ...

  5. 详解在Visual Studio中使用git版本系统[转]

    这篇教程的预期,是希望没有任何版本使用基础的新手也可以掌握,所以细节较多,不当之处,欢迎指正. 一 .安装 git 开发工具 如果要使用 git 进行版本管理,其实使用 git 命令行工具就完全足够了 ...

  6. 谈FME批量自动化数据转换方法

    FME作为转换神器,支持几百种格式的互转,实现互操作化.从fme.exe执行方式入手,讨论Command命令式执行模板(.fmw/.fmwt)和脚本(.tcl/.py)实现自动化批量转换. 1.fme ...

  7. SQL 2008无法连接的解决办法

    问题: 在从本地客户端连接到SQL 2008的时候出现无法连接的错误.错误信息如下所示:

  8. Excel里内嵌在线翻译

    本来寻思着继续写点系统运行日志跟踪技术的,但早晨哥家领导从单位打来电话,让帮助她的闺蜜搞一个excel翻译的问题,总部IT搞不定.我过去是用excel做了几年工作,却都是些数学计算,跟翻译也扯不上啊: ...

  9. HTML5的文档结构和新增标签

    一.HTML5 文档结构1.第一步:打开 开发工具,打开指定文件夹:2.第二步:保存 index.html 文件到磁盘中,.html 是网页后缀:3.第三步:开始编写 HTML5 的基本格式.< ...

  10. poj 2481 - Cows(树状数组)

    看的人家的思路,没有理解清楚,,, 结果一直改一直交,,wa了4次才交上,,, 注意: 为了使用树状数组,我们要按照e从大到小排序.但s要从小到大.(我开始的时候错在这里了) 代码如下: #inclu ...