


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
简介:这是数据库 SQL 千万级数据规模处理概要的详细页面,介绍了和数据库,有关的知识,加入收藏请 按键盘 ctrl+D,谢谢大家的观看!要查看更多有关信息,请点击此处 1. 数据太多。放在一个表肯定不行。 比如月周期表。一个月 1000万,一年就 1.2亿,如此累计下去肯定不行的。所以都是基于一个周期数据 一个表。甚至一个周期数据就要分几个分表。主要是考虑实际的数据量而定。当你创建一个新表时,可能 这个表需要有索引,但是都要先取消索引,或者先建立表,导入数据后,再建立索引。 必要时处理完,统计完后,就备份到磁带或者其他介质。然后清掉。 从问题域来看,一个周期内的数据关联性最大。比如统计一个客户某个帐期的话单总额,同比上月增幅, 还有就是零话费客户等。如此种种,参照的数据不外乎本周期,或者两个周期,甚至更多就是一个季度, 或者半年的样子(类似三个月连续零话费,或者三个月连续欠费未交之类的,保存量之类的报表可能会要 一年的数据)。而且这样的情况在数据挖掘或者高级管理报表中比较常见,一般营业部门使用的界面中, 是不可能含有这样的统计的。 所以数据按表分开,甚至于可以按数据库分开,更便于管理。 大家要打消一种固有的思路,这些数据,跟环卫工人处理垃圾一样,是几乎有点带人工处置的多步骤方式, 也就是不会作为常规数据(如客户基本资料等)长期存在和频繁使用的。所以我们可以改变思路,就是想 尽办法,在需要的时候,做最佳处理,而在不需要时,清理掉它。也就是说,比如分表,你可以分 100个 表,1000 个表都可以。只要方便统计和得到所需数据即可。 view只是说你能在写 select语句时简单一点,对速度没有任何提高。 主要是,你的分表的方式能建立减少访问所有数据,就能提高速度。比如你做某个统计,那些数据恰好在 某个分表内。举例说,你有 10个分部,而你统计 id=1这个分部时,你恰好把数据放在第一个分表里,你 就可以在存储器内通过判断,只访问第一个分表,从而提高统计速度。如果你的统计需要统计全部分表内 的数据,那处理速度还是一样慢。 2. 假设每个表的数据在数十万条,那统计起来是没有任何瓶颈的。常规的数据库都应该没任何问题。 3. 预处理的必要性。 有人问:我统计一千万条数据汇总,要多久多久,能否提高。试想你把中国人所有的存款加总,需要 多长时间吧?看看这个问题的规模,其实再复杂的数据库 dbms,我们说他都逃不过:找出符合条件的数 据,一条一条的加总这个计算过程。暂且不提 where条件了。预处理的必要性在于,如此规模的数据处理, 本身就是一个非常耗时的过程,我们有必要提前,处理其结果到一个表内,或者多个表里面。用户查询时, 再显示出来。比如说 1000万数据分 10个分部,要看每个分部的应收增长,那我们可以预先统计数据到分 部费用表中,则用户端报表显示时,就非常快。如果任何数据汇总都要从原始数据去统计,那是不现实的。 所以我们可以设置原始数据表,中间结果表,结果表,汇总表,月结表,期间表之类的东西。逐步统计归 属。 另外要提的是,这样的动作肯定非常耗时,而且!这样的数据如果由服务器的存储过程定期定时执行的话, 处理的规模就只有一次,任何客户端,都只从结果表里产生报表。如果不用此方法,任何客户端报表都从 原始数据产生,理论上是可以,但是这样的千万条数据汇总的处理会做 N次。而且时间上也是不容许的。 还有,这样的统计过程最好是分开 db进行存放,而公用的数据比如客户基本资料,最好拷贝一份到这个 新 db中来处理。这样可以不干扰到正常的使用。 可以在晚上,或者另开 db或者在另外的 server上跑这个过程。处理完后,写一个标志告诉主 db,则客 户端可以统计这些报表了。 4. 对单行数据做计算字段。举个例子,比如一条记录的产生时间是 2009-01-01 12:00:00.001,如果你的 统计刚好需要对某个时段进行统计,那最好增加字段,比如 hour字段,下一个批处理命令下去,取得小 时数,然后再统计。 5. select语句中忌讳对 column做函数。因为函数将导致查询条件不走索引,而改走遍历所有数据。这 样你就是查一条数据,也会遍历所有数据,那岂不是可怜。 6. 条件尽量都是数字,也就是都用 id,比如分部,镇区,业务种类,接入类型,客户地址,等等,都需 要用到 fk方式的编码,主表里只用数字 id,请记住是数字型 id。整数型数字是计算最快的数据类型。如 果金额极大,可以用 decimal(小数=0)。varchar 类型是效率很低的,不过好像有 sql的 md5算法,我想 可以尝试这个方法(我还没试过)。 7. 索引,这个是海量数据查询首要解决的问题。 没有索引,就是遍历。索引没有覆盖到,也会走遍历。 8. 复杂的统计,用存储器做分步处理,然后得到结果,同比一条 select语句实现要轻松和明白得多。 而且对表的占用时间要短得多。当然,很复杂的统计可能要用到条件判断,循环等,一条 select语句是 无法处理的。多层的 where中的子句也是效率低,容易占用表的写法。 原则上,这里我所讨论的问题都不是那种基于网站内容管理的小 case,主要对企业运用而言。比如举例 说查一个“存量客户增幅表”,问题都不是简单到直接对比两个月的话费总额这么简单,还得找出之前他 的话费如何,比如超过多少钱的才列入统计对象。所以,我的理解:复杂的问题,必须存储过程。真正做 过几个项目才会明白,写 sql语句会比编程代码还要多。真正的程序,其实是 sql。 最后说一句,如果经验足够丰富,写出的统计过程,其执行时间在数分钟甚至几个小时都是正常的。所以 初学者应该明白,数据量是与处理时间成正比的。如果平时处理几条数据感觉很快,数据量猛然增加几个 数量级,不要认为时间上还能优化到几秒钟。 ERP里的 MRP展开计算,通常能到几个小时的。这都是正常的。(主要是物料多,bom 多,计算步骤太多造 成) 9. 补充一点。如果数据量超过我们标题的千万级,甚至几十亿数量级。那也不存在问题,还是分而治之 的思路,就是把数据在多台服务器上并行运行。就好像为灾区捐款一样,靠一个人的力量是不行的。人多 力量大。类似数据分拣之类的,只需要原始数据和基本资料,还有一些计费策略之类的。完全可以分布在 多台 server上同时处理,也是必要的。主要根据你的数据量和单台处理的速度以及你要求的总的处理时 间而决定的。有人说 select语句难道也需要分布?只能说,如果确实有必要,也能做到。比如你要返回 所有话单异常的数据,那也可以从每台执行检索,然
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物流运输行业假期旅游证明(5篇)
- 农村社区小区土地合作开发协议
- 餐饮业智能点餐与外卖服务平台构建方案
- 行政管理中市政学的关键试题及答案
- 商场营业外包服务协议
- 市政学综合复习试题及答案
- 行政管理自考考试形式试题及答案讲解
- 行政管理困境与策略试题及答案
- 2025产权合同专利权转让合同
- 代际差异对团队管理的影响试题及答案
- 《华能企业文化建设》课件
- 陕西延安通和电业有限责任公司招聘笔试真题2024
- 2025年医院管理专业研究生入学考试试卷及答案
- 2025年江苏高处安装、维护、拆除作业-特种作业证考试复习题库(含答案)
- 2025年湖北省黄冈市中考数学调研试卷(4月份)
- Unit7OutdoorfunIntegration(课件)-译林版(2024)英语七年级下册
- 2023年船员培训计划
- 2025中国铁路郑州局集团招聘614人(河南)笔试参考题库附带答案详解
- 陪玩店合同协议
- 货运司机雇佣合同协议
- 超合同30签补充协议
评论
0/150
提交评论