服务提速的方法

服务提速方法(1)使用内存、 io优化

最近有很多优化代码的需求 同步的速度太慢了 一个数据同步操作十几个小时 或者一个同步操作十几分钟 看了一下代码 有很多可以优化的空间和方案可以使用 现在来浅浅的聊一下 我是怎么优化的
本次针对的是io操作
我们都知道 本地操作是在内存 甚至是cache中进行操作 那肯定要比io操作
所以 第一点 在条件允许的情况下
尽可能进行本地操作 少进行io操作 进行io操作的优化
io操作的基本操作 可以看一下本人写的 mysql优化

第一个方向 io优化

io的优化 数据库有些操作特别耗时间 比如说批量插入 批量修改等批量操作 把sql都改成长的 但是要避免sql 过长 我已经看见很多次这种了

 for (object object : list) {
            Mapper.insert(relation);
     }

像这种 完全可以批量操作 可以先用个list存起来 然后批量处理
然后就是更改多表的操作 比如同事更改多张表的多个值 完全可以写一个update语句关联起来一起改
##第二个方向 内存使用
然后就是用内存 比如 我需要用到name去查 id 然后中间会拿id做各种操作的时候 可以用一个hashmap存起来去操作 而且可以去重 避免重复操作 到时候只需要判断里面有没有 就根据逻辑去进行相关处理

 private void fillResourceMap(List<JSONObject> jsonArray) {
        resourceMap = new HashMap<>();
        for (JSONObject metricEntry : jsonArray) {
            String object = metricEntry.getJSONObject("object").getString("object");
            if (!resourceMap.containsKey(object)) {
                resourceMap.put(instance, null);
            }
        }
    }

想这样 根据业务来使用合适的集合 如果使用到了线程 就使用线程安全的 特别是有些网络请求是重复的 而且耗时 这个时候特别适合使用这种
说白了 就是使用合适的集合 来存储 尽量减少io次数 尽可能提高io的速度
再然后 就是使用事务了 使用事务 数据量大的时候 不仅一定程度上保证了数据的安全
而且避免了 多次io 事务开启关闭的消耗 对于十几次io可能 优化不明显 一旦io次数到达十几万 优化就相当可观
对于重复的操作一定要去掉 可以用HashMap 或者 HashSet 如果是线程中使用 可以ConcurrentHashMap和ConcurrentHashSet
还有一些优化方向 就是线程和算法 别小看算法 n平方和logN还是不一样的 线程的话 会涉及到各种锁 可以看一下我的 半小时搞定各种锁 先做一个简单的了解
线程 不是什么时候都可以用的 如果不是io或者阻塞的东西 最好不用 因为线程说白了 也就是时间片的切换执行 如果本来就没有什么阻塞的东西 切换时间片可能更耗时

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值