zoukankan      html  css  js  c++  java
  • 数据库调优过程(五):物理分表,及写入方案调整

    基础才是编程人员应该深入研究的问题,警告自己问题解决不了时,多从运行原理底层研究后再考虑方案。

    • 背景:
    1.      enb下包含多个文件,我们需要解析这样的数据到数据库中,供应用端计算分析使用。之前,我们已经采用了分表方案,分表分为一个主表,三个子表。每一个enb一套表。
    2.      解析业务:

         每取到一个文件就读取为一个实体集合到内存中,当一个文件读取完成后,调入库接口;在入库时,先把这个实体集合拆分为主表的datatable对象,三个子表的datatable对象,之后并行入库。

    • 分析:

        基于上边的一共包含两个弊端问题:

    1.     内存占用高:我们先读取为一个实体集合,之后转化为4个datatable对象才能进行入库,这个过程相当于内存中的数据量成倍的增加了,空间也比最小化内存多了几倍。
    2.     入库速度不高:由于入库表过多,而且连接数也有限,网络带宽成为瓶颈,虽然分表了,但是处理一个enb时,需要写入4个物理表;如果并行16个ENB,则会有16enb*24文件*4表次连接写入,过多的连接对sqlserver数据库也没有好处,写入文件过于分散也使得数据库吞吐量提不高。
    • 调整:

      分表改进:

                   把原来的分为一套表(一个主表,三个子表)方案修改为一个表,避免过多表同时要求写入影响数据库IO吞吐量;

          解析业务调整:

                   每取到一个文件就读取为一个datatable到内存中,当一个文件读取完成后,调入库接口;在入库时,直接把datatable对象入库。

          数据库连接池满问题:

         针对该问题,我们把所有的数据操作尽可能使用一个连接,避免并行打开过多连接,尽量使得一个enb处理过程中只使用一个数据库连接,同一个enb处理过程中,尽量串行处理。

         通过加大并行处理enb数量,来提高cpu,memory,io利用率。


    感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮。本文欢迎各位转载,但是转载文章之后必须在文章页面中给出作者和原文连接

    基础才是编程人员应该深入研究的问题,比如:
    1)List/Set/Map内部组成原理|区别
    2)mysql索引存储结构&如何调优/b-tree特点、计算复杂度及影响复杂度的因素。。。
    3)JVM运行组成与原理及调优
    4)Java类加载器运行原理
    5)Java中GC过程原理|使用的回收算法原理
    6)Redis中hash一致性实现及与hash其他区别
    7)Java多线程、线程池开发、管理Lock与Synchroined区别
    8)Spring IOC/AOP 原理;加载过程的。。。

     
     
    原文链接:https://www.cnblogs.com/yy3b2007com/p/5699829.html
  • 相关阅读:
    浏览器工作原理
    Linux内存性能指标、CPU性能指标
    性能结果分析
    javascript事件与event对象的属性
    JavaScript的内置对象和浏览器对象
    互联网协议
    DNS原理
    浏览器缓存知识归纳
    LR性能指标分析
    使用dynatrace+showslow进行前端性能测试
  • 原文地址:https://www.cnblogs.com/ztf20/p/12304581.html
Copyright © 2011-2022 走看看