快速大批量处理数据需要的关注的地方

      这几天去某银行协助批量处理的优化工作。到那里一看,真知道了为啥有些银行的账单或者刷卡、入账等信息会延迟一天或者两天。先不说他们的处理机制,但看那些开发出来的代码,我就无语了。
      工作还是得做,还得耐心从怎样加快SQL的执行入手工作。我分别从索引的建立、索引的使用、代码书写、数据分布、并发的使用、事务控制等几个基本方面给现场的人员做了介绍。
      1、索引建立的原则
             这个内容我借鉴了一个老师的简单总结:
             四要点:一是细心选择符合索引键的前后顺序(确定索引前导列);
                             二是where子句中数据关联字段的确定;
                             三是排序分组字段的确定;
                             四是空值字段在索引中的处理;
             这里只提一下选择索引键值前后顺序的简单办法:select count(distinct 字段) from .... 比较一下即可,简单的说就是以匹配值最少的字段作为前导列时索引效果最好;where条件中关联字段最好是主键或者是索引的键值(最好是前导列);如果有排序和分组,尽量的将该种情况考虑进去。剩下的一个空值字段在索引中的处理方法,就是和一个非空字段的组合处理,而且使用时尽可能的以索引字段为条件实现匹配。
            补充一下:快速建立索引一定要注意使用并行,并注意可以使用nologging方法(如果在DG环境时还需要多考虑一下,毕竟DG环境下是通过归档日志来同步数据);使用完并行一定要记得修改;


        2、索引使用的原则
              在第一部分中说道了一部分,这里简单 补充一下:
             A、在有大量的数据update时,则尽量少用位图索引;
             B、要注意隐含数据转换的发生造成的不使用索引的情况;
             C、大量数据维护时,一定要避免维护索引字段,即频繁发生更改的字段不可作为索引字段;
             D、要注意表上的索引,到底是否被使用(方法很简单alter index monitoring,一定要记得关闭!)
              E、反转索引的使用。
          3、代码书写的原则
               在保证逻辑正确的同时,一定要注意常用的SQL代码书写技巧。
               1、in子句的处理(尽量使用exist);
               2、like的使用 (尽量少用)
               3、关联upadte的写法(最长见的应用)
               4、insert语句中使用/* +append  parallel(table_name,number)*/ 开启并行;
               5、关注函数的使用以及字段类型的匹配;
           这里要补充一下:常见的工具都有自动生成SQL的功能,一定要注意生成代码的使用,这里会有陷阱,稍不注意就掉里了。
           4、数据的分布
               数据的分布主要说的就是尽可能的将数据进行分区甚至子分区,分区方式无非就是常见的hash(数据离散化,减少争用)、list或者组合分区;分区的键值有些时候是可以组合键值的。这里也要注意的是,索引也可以hash分区,分区的数量一定要是2的n次方。
            5、并发的使用
             并发的使用多在批量数据的更新和导入导出,这点儿网上资料不少,无非就是append 或者paralle的使用,不过要注意的是,在并发DML或并发DDL时,会对数据表或者索引的参数有影响,一定要将其修改过来,在我其它的文章中也是多次强调的。
             备注:通常这些还是要结合nologging一起使用,目的就是加快处理速度。
            6、事务的控制
             在大数据量的DML中,对事务的处理是最关键的,不仅仅因为是为了避免事务的争用、产生事务锁等,更重要的是从原理上block的ITL本身就不是无限的,要综合考虑设置initrans以及PCTFREE、PCTUSED参数的配置。
             这方面从开发角度来讲,简单一句话:控制好commit。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值