b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

狐小E智慧办公:如何通过分页方式解决内存分页

电脑杂谈  发布时间:2021-05-23 19:00:23  来源:网络整理

通常不建议在项目中使用内存分页,因为它效率低。扫描相关表中的所有数据,将它们全部加载到内存中,然后返回所需的数据(可能将数万个项目加载到内存中,最后返回5个项目),这会占用大量内存

但是在当前负责开发的Huxiao E Smart Office()平台中,由于某些特殊情况,必须通过内存分页来解决。

场景1(查询中的批次)

在excel中批量导入员工数据时,必须使用手机号码作为验证数据是否已存在的唯一条件。如果是这样,则excel中的内容将用作要更新的最新记录。如果不存在,它将直接更新。

这种操作将导致在每次导入时​​检查以查看数据是否存在。这是非常低效的。优化方法是取出要导入的所有员工手机号码,并以手机号码作为进入的条件。以in的方式进行搜索,因此您只能与进行一次交互,并将数据加载到内存中进行判断。

java翻页数据内存_java内存模拟file_java翻页数据内存

这时会出现问题:如果导入的数据有5000个,则表示在SQL拼接的条件下有5000个参数,并且Oracle中IN参数的数量不能超过1000,否则将出现异常。被报告。尽管Mysql中没有对in的限制,但sql的默认长度为1M(my.ini中的max_allowed_pa​​cket可以调整),尽管可以通过参数进行调整,但是在程序级别调整到2M可能还不够。当参数调整得太大时,Mysql将自动设置回默认值。从程序员的角度来看,从代码的角度解决问题更安全。

这时,可以使用内存分页,并根据实际情况批量访问内存中的数据。与重复的查询相比,效率肯定更高,并且查询中不会存在导致SQL太长和太长的问题。报告错误。

方案2(模糊查询加密数据)

在业务实现过程中,有这样一个表:员工要辞职的临时表。该表涉及的业务是,在执行员工辞职操作之前,如果存在尚未提交的待处理事务,则将员工信息放置在此表中,等待辞职事务得到处理后,可以执行真正的辞职操作,然后可以删除与该表相对应的数据。由于表中数据的机密性,某些字段(名称,手机号码等)已被加密。

分析此表的特征:

①数据量相对较小(仅对于未完成交易的管理员等角色将保存在此表中)

②根据条件对页面模糊查询的数据进行加密并存储在中

在这种情况下,可以使用内存分页来查询内存,然后在解密之后,它将与前端传递的搜索词进行模糊匹配。实际上支持加密和解密,但是当前的数据加密不使用方法。另外,在实际使用情况下,表中的数据量很小,因此一次查询内存要比执行解密更快。全面考虑使用内存分页更为合理。

java翻页数据内存_java翻页数据内存_java内存模拟file

实施方法

在Java8中使用Steam的.skip()和limit()实现

   /**
     * 内存分页
     *
     * @param data     数据
     * @param pageNum  当前页
     * @param pageSize 分页条数
     * @return
     */
   public List pageOprateInMemory (List data, Integer pageNum, Integer pageSize) {
        if (CollectionUtils.isEmpty(data)) {
            return null;
        }
        // 根据当前页和分页条数 从总记录数中取数据
        List temps = data.stream().skip(pageSize * (pageNum - 1)).limit(pageSize)
                             .collect(Collectors.toList());
        return temps;
    }

通过上述内存分页操作,提高了项目数据查询的效率,并减少了对sql的限制错误。对于少量加密数据的前端模糊查询,也具有较好的表示效果。

作者简介:肖文文,Huxiao E Smart Office()开发工程师,专注于移动办公软件SaaS平台的构建和轻型应用程序的开发


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-377571-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...