数据统计之数据多线程数据传输

说实话这段代码对于数据库的提升要看读写比例,数据库插入的数据的方式以及引起的数据库锁表示行锁还是页锁还是表锁有关系,线程数据量依据服务器的不同设定也不一样。提升效率比较难以计算。但是毕竟也是一种尝试

就贴出来共享了

           SqlHelper.CommandTimeout = 1800;
            long minAutoID = GetSourceMaxOrMinID(curstatdatevalue, DownLogSourceDBConnString, true);
            long maxAutoID = GetSourceMaxOrMinID(curstatdatevalue, DownLogSourceDBConnString, false);
            //数据分片,确定每个分片的数据量
            long everyCount = (maxAutoID - minAutoID) / PartsCount + 1;
            List<AutoIdArea> list = new List<AutoIdArea>();
            for (int i = 0; i < PartsCount; i++)
            {
                list.Add(new AutoIdArea(minAutoID + i * everyCount, minAutoID + (i + 1) * everyCount - 1, "D_Copy_ThreadAutoId_" + curstatdatevalue / 100 + "_" + i));
            }
            
            Utility.WriteLog("开始 将明细数据转换成原始统计数据保存到ResDownloadLog_Temp表中", LogDir);
            //设置信号灯
            Semaphore semaphores = new Semaphore(ThreadCount, ThreadCount);
            //定义方法
            Action<AutoIdArea, Semaphore, int> fun = (areaInfo, s, curstat) =>
                {
                    try
                    {
                        long minId =
                            Convert.ToInt64(Utility.GetStatAutoID(areaInfo.ThreadKey, areaInfo.BeginInt,
                                                                  ComputingDB_ConnString));
                        if (minId <= areaInfo.BeginInt)
                            minId = areaInfo.BeginInt;
                        //在别的线程没有出现异常的情况下继续跑
                        while (Import(areaInfo, ref minId, curstat, DownLogSourceDBConnString) > 0) ;
                    }
                    catch (Exception ex)
                    {
                        ThreadException = ex;
                        Utility.WriteLog(
                            string.Format("异步导入数据异常:beginId={0},endId={1},ex:{2}", areaInfo.BeginInt, areaInfo.EndInt,
                                          ex.ToString()), LogDir);
                        Utility.SendMail("异步导入数据异常",
                                         string.Format("beginId={0},endId={1},ex:{2}", areaInfo.BeginInt,
                                                       areaInfo.EndInt, ex.ToString()), false);
                    }
                    finally
                    {
                        s.Release();
                    }

                };
            List<IAsyncResult> listResult = new List<IAsyncResult>();

            for (int i = 0; i < list.Count; i++)
            {
                semaphores.WaitOne();
                if (ThreadException != null)
                {
                    //等待所有异步线程完成
                    for (int j = 0; j < listResult.Count; j++)
                    {
                        listResult[j].AsyncWaitHandle.WaitOne();
                    }
                    throw ThreadException;
                }
                listResult.Add(fun.BeginInvoke(list[i], semaphores, curstatdatevalue, null, null));
            }

            //等待所有异步线程完成
            for (int i = 0; i < listResult.Count; i++)
            {
                listResult[i].AsyncWaitHandle.WaitOne();
            }
            if (ThreadException != null)
            {
                throw ThreadException;
            }
时间: 2024-11-05 20:46:19

数据统计之数据多线程数据传输的相关文章

在没Hadoop 、GP 前提下怎么进行实时数据统计。

最近着手个项目,整体数据量有5亿多,每个月增量9000w.应用场景是Oltp 根据用户id直接计算各种维度值. 因为是Oltp 场景,直接根据用户id %2000分(方便后续横向扩展),有些喜欢扯分区表的或者顺序分表的请复习下数据库原理以及硬件原理. 分完表oltp 访问速度上了几个level.但是牵涉到一个实时统计的问题,需要对2000张表进行实时统计.因暂时没gp.hadoop 这种分布式数据库环境,以及怎么解决Oltp 到分布式数据库之间实时同步的问题. 想了个恶心的办法.对2000张表开

.net数据统计系统设计(中小型)

近一年多没在博客园写东西了,从换公司后就一直努力学习公司的框架和业务.而今接手一个电商数据统计项目,在博客园搜索统计项目解决方案却一无所获,最终自己设计并在开发的过程中持续更新,希望可以和大家一起交流. 需求 项目组的电商系统运行了3年多,每天下单量在2w单左右. 1.要求从商户,客户,商品的角度统计每天,每月,任意天数查询的需求. 2.并对部分敏感数据做实时查询,例如下单数,下单金额之类的指标. 3.对客户,商品交易额交易量指标做top并支持导出. 4.按地域统计各个交易指标并做top. 5.

Asp.net管理信息系统中数据统计功能的实现

数据统计是每个系统中必备的功能,在给领导汇报统计数据,工作中需要的进展数据时非常有用. 在我看来,一个统计的模块应该实现以下功能: 能够将常用的查询的统计结果显示出来: 显示的结果可以是表格形式,也可以是图形形式,如果是图形的话能够以多种形式显示(柱状图.折线图.饼图.雷达图.堆叠柱状图等): 统计查询的结果,点击数字或者百分比能够显示详细的数据: 能够自由组合查询条件.筛选条件.分组条件.排序等: 统计结果最好有个实时预览: 查询统计能够保存,以便下次能直接调用并显示统计查询的结果: 对于保存

在Sqlserver下巧用行列转换日期的数据统计

在Sqlserver下巧用行列转换日期的数据统计 前言 在SQLSERVER 中有很多统计函数的基础语法,有使用Group By 或 partition by 后配合Sum,Count(*) 等用法.常应用于统计网站的PV流量.合同项目中月收入等业务场景中.在文中我分享下最近做过的统计小案例,和大家互相学习下:) 背景 合同中行项目按月收入的统计 1.业务逻辑及需求  1.1 表业务逻辑 合同是公司间互相签署的法律契约,一份合同从诞生起,就开始流转于公司的各个部门,最核心的还是盈亏的数值.盈亏是

PHP+Mysql+jQuery实现中国地图区域数据统计(raphael.js)

使用过百度统计或者cnzz统计的童鞋应该知道,后台有一个地图统计,不同访问量的省份显示的颜色也不一样,今天我将带领大家开发一个这样的案例.上一篇<使用raphael.js绘制中国地图>文章中,我给大家介绍了如何使用raphael.js绘制中国地图,今天我要给大家介绍在实际应用中,如何把数据载入到地图中.本文结合实例,使用PHP+Mysql+jQuery实现中国地图各省份数据统计效果. 本例以统计某产品在各省份的活跃用户数为背景,数据来源于mysql数据库,根据各省份的活跃用户数,分成不同等级,

网络遥控器数据统计0526

一.统计脚本及代码 1 #!/bin/sh 2 3 root_dir=`pwd` 4 source_file="$root_dir"/operate0526.txt 5 single_file="$root_dir"/single0526.txt 6 result_file="$root_dir"/result.txt 7 8 rm -rf $single_file 9 rm -rf $result_file 10 11 ###统计出现次数最多的

1.大数据统计(原创)

大数据统计 1.项目需求,统计海量数据中某一参数的概率分布 2.实现过程 #!/usr/bin env python # -*- coding:utf-8 -*- import re def preprocess(fileName, pattern): ''' 将数据集进行预处理,比如取出RSSI那一列的数据 :param fileName: 接收相对路径 :param pattern: 接收正则表达式的模板 :return: 返回Region of interest数据集 ''' with o

echart+jquery+json统计TP数据

由于工作需要,需要统计交易数据的TP50,TP90,TP95,TP99.采用的前端技术是jquery+json+echart. 一.TP定义(谷歌) Calculating TP is very simple: 1. Sort all times in ascending order: [2s, 10s, 100s, 1000s] 2. find latest item in portion you need to calculate. 2.1 For TP50 it will be ceil(

基于Android MPAndroidChart实现腾讯QQ群数据统计报表核心功能

 基于Android MPAndroidChart实现腾讯QQ群数据统计报表核心功能 腾讯QQ移动客户端(新版)的QQ群有一项功能比较有趣,是关于QQ群的.QQ群新增一项功能开放给具有管理权限的群成员:管理群 -> 群数据 中,会看到QQ群的一些基础数据统计报表,如人数.发言条数的统计报表,如图: 我之前写了一篇文章是关于Android平台上的一个统计报表的开源框架MPAndroidChart,文章介绍了如何在自己的项目中使用MPAndroidChart制作统计报表,同时给出了基本折线图的一