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

盘锦市建设银行网站图片转链接在线转换

盘锦市建设银行网站,图片转链接在线转换,专业网站建设费用报价,网站做开票2019独角兽企业重金招聘Python工程师标准 1. 海量数据处理分析 原文地址#xff1a; http://blog.csdn.net/DaiZiLiang/archive/2006/12/06/1432193.aspx 笔者在实际工作中#xff0c;有幸接触到海量的数据处理问题#xff0c;对其进行处理是一项艰巨而复… 2019独角兽企业重金招聘Python工程师标准 1. 海量数据处理分析    原文地址 http://blog.csdn.net/DaiZiLiang/archive/2006/12/06/1432193.aspx 笔者在实际工作中有幸接触到海量的数据处理问题对其进行处理是一项艰巨而复杂的任务。原因有以 下几个方面 一、数据量过大数据中什么情况都可能存在。如果说有10条数据那么大不了每条去逐一检查人为处 理如果有上百条数据也可以考虑如果数据上到千万级别甚至过亿那不是手工能解决的了必须 通过工具或者程序进行处理尤其海量的数据中什么情况都可能存在例如数据中某处格式出了问题 尤其在程序处理时前面还能正常处理突然到了某个地方问题出现了程序终止了。 二、软硬件要求高系统资源占用率高。对海量的数据进行处理除了好的方法最重要的就是合理使用 工具合理分配系统资源。一般情况如果处理的数据过TB级小型机是要考虑的普通的机子如果有好 的方法可以考虑不过也必须加大CPU和内存就象面对着千军万马光有勇气没有一兵一卒是很难取胜 的。 三、要求很高的处理方法和技巧。这也是本文的写作目的所在好的处理方法是一位工程师长期工作经验 的积累也是个人的经验的总结。没有通用的处理方法但有通用的原理和规则。 那么处理海量数据有哪些经验和技巧呢我把我所知道的罗列一下以供大家参考 一、选用优秀的数据库工具 现在的数据库工具厂家比较多对海量数据的处理对所使用的数据库工具要求比较高一般使用Oracle或 者DB2微软公司最近发布的SQL Server 2005性能也不错。另外在BI领域数据库数据仓库多维数据 库数据挖掘等相关工具也要进行选择象好的ETL工具和好的OLAP工具都十分必要例如Informatic Eassbase等。笔者在实际数据分析项目中对每天6000万条的日志数据进行处理使用SQL Server 2000 需要花费6小时而使用SQL Server 2005则只需要花费3小时。 二、编写优良的程序代码 处理数据离不开优秀的程序代码尤其在进行复杂数据处理时必须使用程序。好的程序代码对数据的处 理至关重要这不仅仅是数据处理准确度的问题更是数据处理效率的问题。良好的程序代码应该包含好 的算法包含好的处理流程包含好的效率包含好的异常处理机制等。 三、对海量数据进行分区操作 对海量数据进行分区操作十分必要例如针对按年份存取的数据我们可以按年进行分区不同的数据库 有不同的分区方式不过处理机制大体相同。例如SQL Server的数据库分区是将不同的数据存于不同的文 件组下而不同的文件组存于不同的磁盘分区下这样将数据分散开减小磁盘I/O减小了系统负荷 而且还可以将日志索引等放于不同的分区下。 四、建立广泛的索引 对海量的数据处理对大表建立索引是必行的建立索引要考虑到具体情况例如针对大表的分组、排序 等字段都要建立相应索引一般还可以建立复合索引对经常插入的表则建立索引时要小心笔者在处 理数据时曾经在一个ETL流程中当插入表时首先删除索引然后插入完毕建立索引并实施聚合 操作聚合完成后再次插入前还是删除索引所以索引要用到好的时机索引的填充因子和聚集、非聚 集索引都要考虑。 五、建立缓存机制 当数据量增加时一般的处理工具都要考虑到缓存问题。缓存大小设置的好差也关系到数据处理的成败 例如笔者在处理2亿条数据聚合操作时缓存设置为100000条/Buffer这对于这个级别的数据量是可行 的。 六、加大虚拟内存 如果系统资源有限内存提示不足则可以靠增加虚拟内存来解决。笔者在实际项目中曾经遇到针对18亿 条的数据进行处理内存为1GB1个P4 2.4G的CPU对这么大的数据量进行聚合操作是有问题的提示内 存不足那么采用了加大虚拟内存的方法来解决在6块磁盘分区上分别建立了6个4096M的磁盘分区用 于虚拟内存这样虚拟的内存则增加为 4096*6 1024 25600 M解决了数据处理中的内存不足问题。 七、分批处理  海量数据处理难因为数据量大那么解决海量数据处理难的问题其中一个技巧是减少数据量。可以对海量 数据分批处理然后处理后的数据再进行合并操作这样逐个击破有利于小数据量的处理不至于面对 大数据量带来的问题不过这种方法也要因时因势进行如果不允许拆分数据还需要另想办法。不过一 般的数据按天、按月、按年等存储的都可以采用先分后合的方法对数据进行分开处理。 八、使用临时表和中间表 数据量增加时处理中要考虑提前汇总。这样做的目的是化整为零大表变小表分块处理完成后再利 用一定的规则进行合并处理过程中的临时表的使用和中间结果的保存都非常重要如果对于超海量的数 据大表处理不了只能拆分为多个小表。如果处理过程中需要多步汇总操作可按汇总步骤一步步来 不要一条语句完成一口气吃掉一个胖子。 九、优化查询SQL语句 在对海量数据进行查询处理过程中查询的SQL语句的性能对查询效率的影响是非常大的编写高效优良 的SQL脚本和存储过程是数据库工作人员的职责也是检验数据库工作人员水平的一个标准在对SQL语句 的编写过程中例如减少关联少用或不用游标设计好高效的数据库表结构等都十分必要。笔者在工作 中试着对1亿行的数据使用游标运行3个小时没有出结果这是一定要改用程序处理了。 十、使用文本格式进行处理 对一般的数据处理可以使用数据库如果对复杂的数据处理必须借助程序那么在程序操作数据库和程 序操作文本之间选择是一定要选择程序操作文本的原因为程序操作文本速度快对文本进行处理不 容易出错文本的存储不受限制等。例如一般的海量的网络日志都是文本格式或者csv格式文本格式 对它进行处理牵扯到数据清洗是要利用程序进行处理的而不建议导入数据库再做清洗。 十一、       定制强大的清洗规则和出错处理机制 海量数据中存在着不一致性极有可能出现某处的瑕疵。例如同样的数据中的时间字段有的可能为非 标准的时间出现的原因可能为应用程序的错误系统的错误等这是在进行数据处理时必须制定强大 的数据清洗规则和出错处理机制。 十二、       建立视图或者物化视图 视图中的数据来源于基表对海量数据的处理可以将数据按一定的规则分散到各个基表中查询或处理 过程中可以基于视图进行这样分散了磁盘I/O正如10根绳子吊着一根柱子和一根吊着一根柱子的区别 。 十三、       避免使用32位机子极端情况 目前的计算机很多都是32位的那么编写的程序对内存的需要便受限制而很多的海量数据处理是必须大 量消耗内存的这便要求更好性能的机子其中对位数的限制也十分重要。 十四、       考虑操作系统问题 海量数据处理过程中除了对数据库处理程序等要求比较高以外对操作系统的要求也放到了重要的位 置一般是必须使用服务器的而且对系统的安全性和稳定性等要求也比较高。尤其对操作系统自身的缓 存机制临时空间的处理等问题都需要综合考虑。 十五、       使用数据仓库和多维数据库存储 数据量加大是一定要考虑OLAP的传统的报表可能5、6个小时出来结果而基于Cube的查询可能只需要几 分钟因此处理海量数据的利器是OLAP多维分析即建立数据仓库建立多维数据集基于多维数据集进 行报表展现和数据挖掘等。 十六、       使用采样数据进行数据挖掘 基于海量数据的数据挖掘正在逐步兴起面对着超海量的数据一般的挖掘软件或算法往往采用数据抽样 的方式进行处理这样的误差不会很高大大提高了处理效率和处理的成功率。一般采样时要注意数据的 完整性和防止过大的偏差。笔者曾经对1亿2千万行的表数据进行采样抽取出400万行经测试软件测 试处理的误差为千分之五客户可以接受。 还有一些方法需要在不同的情况和场合下运用例如使用代理键等操作这样的好处是加快了聚合时间 因为对数值型的聚合比对字符型的聚合快得多。类似的情况需要针对不同的需求进行处理。 海量数据是发展趋势对数据分析和挖掘也越来越重要从海量数据中提取有用信息重要而紧迫这便要 求处理要准确精度要高而且处理时间要短得到有价值信息要快所以对海量数据的研究很有前途 也很值得进行广泛深入的研究。 2.  海量数据的查询优化及分页算法方案 很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解。中国自学编程网提供 www.zxbc.cn 比如  select * from table1 where name’zhangsan’ and tID 10000   和执行:  select * from table1 where tID 10000 and name’zhangsan’    一些人不知道以上两条语句的执行效率是否一样,因为如果简单的从语句先后上看,这两个语句的确是不一样,如果tID是一个聚合索引,那么后一句仅仅从表的10000条以后的记录中查找就行了而前一句则要先从全表中查找看有几个name’zhangsan’的,而后再根据限制条件条件tID10000来提出查询结果。    事实上,这样的担心是不必要的。SQL SERVER中有一个“查询分析优化器”,它可以计算出where子句中的搜索条件并确定哪个索引能缩小表扫描的搜索空间,也就是说,它能实现自动优化。    虽然查询优化器可以根据where子句自动的进行查询优化,但大家仍然有必要了解一下“查询优化器”的工作原理,如非这样,有时查询优化器就会不按照您的本意进行快速查询。    在查询分析阶段,查询优化器查看查询的每个阶段并决定限制需要扫描的数据量是否有用。如果一个阶段可以被用作一个扫描参数(SARG,那么就称之为可优化的,并且可以利用索引快速获得所需数据。    SARG的定义用于限制搜索的一个操作,因为它通常是指一个特定的匹配,一个值得范围内的匹配或者两个以上条件的AND连接。形式如下  列名 操作符 常数 或 变量  或  常数 或 变量 操作符列名    列名可以出现在操作符的一边,而常数或变量出现在操作符的另一边。如  Name’张三’  价格5000  5000价格  Name’张三’ and 价格5000    如果一个表达式不能满足SARG的形式,那它就无法限制搜索的范围了,也就是SQL SERVER必须对每一行都判断它是否满足WHERE子句中的所有条件。所以一个索引对于不满足SARG形式的表达式来说是无用的。    介绍完SARG后,我们来总结一下使用SARG以及在实践中遇到的和某些资料上结论不同的经验   1、Like语句是否属于SARG取决于所使用的通配符的类型   如name like ‘张%’ ,这就属于SARG   而name like ‘%张’ ,就不属于SARG。   原因是通配符%在字符串的开通使得索引无法使用。   2、or 会引起全表扫描 Name’张三’ and 价格5000 符号SARG,而Name’张三’ or 价格5000 则不符合SARG。使用or会引起全表扫描。   3、非操作符、函数引起的不满足SARG形式的语句   不满足SARG形式的语句最典型的情况就是包括非操作符的语句,如NOT、!、、!、!、NOT EXISTS、NOT IN、NOT LIKE等,另外还有函数。下面就是几个不满足SARG形式的例子 ABS(价格)5000 Name like ‘%三’   有些表达式,如 WHERE 价格*25000   SQL SERVER也会认为是SARG,SQL SERVER会将此式转化为 WHERE 价格2500/2 [Page]   但我们不推荐这样使用,因为有时SQL SERVER不能保证这种转化与原始表达式是完全等价的。   4、IN 的作用相当与OR   语句 Select * from table1 where tid in (2,3)   和 Select * from table1 where tid2 or tid3   是一样的,都会引起全表扫描,如果tid上有索引,其索引也会失效。   5、尽量少用NOT   6、exists 和 in 的执行效率是一样的   很多资料上都显示说,exists要比in的执行效率要高,同时应尽可能的用not exists来代替not in。但事实上,我试验了一下,发现二者无论是前面带不带not,二者之间的执行效率都是一样的。因为涉及子查询,我们试验这次用SQL SERVER自带的pubs数据库。运行前我们可以把SQL SERVER的statistics I/O状态打开。   (1select title,price from titles where title_id in (select title_id from sales where qty30)   该句的执行结果为   表 ’sales’。扫描计数 18,逻辑读 56 次,物理读 0 次,预读 0 次。   表 ’titles’。扫描计数 1,逻辑读 2 次,物理读 0 次,预读 0 次。   (2select title,price from titles where exists (select * from sales where sales.title_idtitles.title_id and qty30)   第二句的执行结果为   表 ’sales’。扫描计数 18,逻辑读 56 次,物理读 0 次,预读 0 次。   表 ’titles’。扫描计数 1,逻辑读 2 次,物理读 0 次,预读 0 次。   我们从此可以看到用exists和用in的执行效率是一样的。   7、用函数charindex()和前面加通配符%的LIKE执行效率一样   前面,我们谈到,如果在LIKE前面加上通配符%,那么将会引起全表扫描,所以其执行效率是低下的。但有的资料介绍说,用函数charindex()来代替LIKE速度会有大的提升,经我试验,发现这种说明也是错误的 select gid,title,fariqi,reader from tgongwen where charindex(’刑侦支队’,reader)0 and fariqi’2004-5-5’   用时7秒,另外扫描计数 4,逻辑读 7155 次,物理读 0 次,预读 0 次 select gid,title,fariqi,reader from tgongwen where reader like ’%’ ’刑侦支队’ ’%’ and fariqi’2004-5-5’   用时7秒,另外扫描计数 4,逻辑读 7155 次,物理读 0 次,预读 0 次。   8、union并不绝对比or的执行效率高   我们前面已经谈到了在where子句中使用or会引起全表扫描,一般的,我所见过的资料都是推荐这里用union来代替or。事实证明,这种说法对于大部分都是适用的。 [Page] select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi’2004-9-16’ or gid9990000   用时68秒。扫描计数 1,逻辑读 404008 次,物理读 283 次,预读 392163 次。 select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi’2004-9-16’  union select gid,fariqi,neibuyonghu,reader,title from Tgongwen where gid9990000   用时9秒。扫描计数 8,逻辑读 67489 次,物理读 216 次,预读 7499 次。   看来,用union在通常情况下比用or的效率要高的多。   但经过试验,笔者发现如果or两边的查询列是一样的话,那么用union则反倒和用or的执行速度差很多,虽然这里union扫描的是索引,而or扫描的是全表。 select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi’2004-9-16’ or fariqi’2004-2-5’   用时6423毫秒。扫描计数 2,逻辑读 14726 次,物理读 1 次,预读 7176 次。 select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi’2004-9-16’  union select gid,fariqi,neibuyonghu,reader,title from Tgongwen where    fariqi’2004-2-5’   用时11640毫秒。扫描计数 8,逻辑读 14806 次,物理读 108 次,预读 1144 次。   9、字段提取要按照“需多少、提多少”的原则,避免“select *”   我们来做一个试验 select top 10000 gid,fariqi,reader,title from tgongwen order by gid desc   用时4673毫秒 select top 10000 gid,fariqi,title from tgongwen order by gid desc   用时1376毫秒 select top 10000 gid,fariqi from tgongwen order by gid desc   用时80毫秒   由此看来,我们每少提取一个字段,数据的提取速度就会有相应的提升。提升的速度还要看您舍弃的字段的大小来判断。   10、count(*)不比count(字段)慢   某些资料上说用*会统计所有列,显然要比一个世界的列名效率低。这种说法其实是没有根据的。我们来看 select count(*) from Tgongwen   用时1500毫秒 select count(gid) from Tgongwen    用时1483毫秒 select count(fariqi) from Tgongwen   用时3140毫秒 select count(title) from Tgongwen   用时52050毫秒   从以上可以看出,如果用count(*)和用count(主键)的速度是相当的,而count(*)却比其他任何除主键以外的字段汇总速度要快,而且字段越长,汇总的速度就越慢。我想,如果用count(*), SQL SERVER可能会自动查找最小字段来汇总的。当然,如果您直接写count(主键)将会来的更直接些。 [Page]   11、order by按聚集索引列排序效率最高   我们来看(gid是主键,fariqi是聚合索引列 select top 10000 gid,fariqi,reader,title from tgongwen   用时196 毫秒。 扫描计数 1,逻辑读 289 次,物理读 1 次,预读 1527 次。 select top 10000 gid,fariqi,reader,title from tgongwen order by gid asc   用时4720毫秒。 扫描计数 1,逻辑读 41956 次,物理读 0 次,预读 1287 次。 select top 10000 gid,fariqi,reader,title from tgongwen order by gid desc   用时4736毫秒。 扫描计数 1,逻辑读 55350 次,物理读 10 次,预读 775 次。 select top 10000 gid,fariqi,reader,title from tgongwen order by fariqi asc   用时173毫秒。 扫描计数 1,逻辑读 290 次,物理读 0 次,预读 0 次。 select top 10000 gid,fariqi,reader,title from tgongwen order by fariqi desc   用时156毫秒。 扫描计数 1,逻辑读 289 次,物理读 0 次,预读 0 次。   从以上我们可以看出,不排序的速度以及逻辑读次数都是和“order by 聚集索引列” 的速度是相当的,但这些都比“order by 非聚集索引列”的查询速度是快得多的。   同时,按照某个字段进行排序的时候,无论是正序还是倒序,速度是基本相当的。 转载于:https://my.oschina.net/xiufeng/blog/140969
http://www.huolong8.cn/news/32364/

相关文章:

  • 灵芝住房和城乡建设局局网站四大央企是哪四大企业
  • 驻马店建设网站发布软文
  • 厦门哪家网站建设最好百度小程序登录
  • 乾县做网站wordpress怎么样建站内战
  • 做视频直播网站需要多少资金网站开发拥有权约定
  • 宝塔软件怎么做网站大连做网站企业
  • 手机网站好还是h5好专业的南昌网站建设
  • 深圳企业建站公司网站系统性能定义
  • ip开源网站fpga可以做点什么用玄武网站建设
  • 免费安全正能量网站大全路由器优化大师
  • 网站建设与维护工作北京高端网站公司哪家好
  • 免费推广网站在线做图片的软件
  • 网站制造制作网站公司推荐
  • 青浦区网站建设域名网安备案
  • 看上去高端的网站网站建设和网站开发的区别
  • 汕头网站推广找哪里如何选择企业网站建设
  • 正规网站制作全包孝感房地产网站建设
  • 网站建设 素材北京工业产品设计公司
  • 三网合一网站开发如何用html制作一个投票网页
  • 建站平台 phpwind网站建设 电子书
  • 使用php做网站wordpress最受欢迎的主题
  • 长沙建站价格wordpress优点缺点
  • 刷会员网站怎么做怎么在淘宝上做网站
  • 网站建设合同约定三年后wordpress获取文章发表时间
  • 厚瑜网站建设做跨境电商的人才网站
  • 深圳网站建设q.479185700惠wordpress黄聪文件上传
  • 如何让网站快速收录你成都黑帽seo
  • 湛江做网站制作博客网站源码
  • 建设管理网站首页农业特色网站建设
  • 网站前端用什么语言在线详情页制作