通常不建议在项目中使用内存分页,因为它效率低。扫描相关表中的所有数据,将它们全部加载到内存中,然后返回所需的数据(可能将数万个项目加载到内存中,最后返回5个项目),这会占用大量内存
但是在当前负责开发的Huxiao E Smart Office()平台中,由于某些特殊情况,必须通过内存分页来解决。
场景1(查询中的批次)
在excel中批量导入员工数据时,必须使用手机号码作为验证数据是否已存在的唯一条件。如果是这样,则excel中的内容将用作要更新的最新记录。如果不存在,它将直接更新。
这种操作将导致在每次导入时检查以查看数据是否存在。这是非常低效的。优化方法是取出要导入的所有员工手机号码,并以手机号码作为进入的条件。以in的方式进行搜索,因此您只能与进行一次交互,并将数据加载到内存中进行判断。

这时会出现问题:如果导入的数据有5000个,则表示在SQL拼接的条件下有5000个参数,并且Oracle中IN参数的数量不能超过1000,否则将出现异常。被报告。尽管Mysql中没有对in的限制,但sql的默认长度为1M(my.ini中的max_allowed_packet可以调整),尽管可以通过参数进行调整,但是在程序级别调整到2M可能还不够。当参数调整得太大时,Mysql将自动设置回默认值。从程序员的角度来看,从代码的角度解决问题更安全。
这时,可以使用内存分页,并根据实际情况批量访问内存中的数据。与重复的查询相比,效率肯定更高,并且查询中不会存在导致SQL太长和太长的问题。报告错误。
方案2(模糊查询加密数据)
在业务实现过程中,有这样一个表:员工要辞职的临时表。该表涉及的业务是,在执行员工辞职操作之前,如果存在尚未提交的待处理事务,则将员工信息放置在此表中,等待辞职事务得到处理后,可以执行真正的辞职操作,然后可以删除与该表相对应的数据。由于表中数据的机密性,某些字段(名称,手机号码等)已被加密。
分析此表的特征:
①数据量相对较小(仅对于未完成交易的管理员等角色将保存在此表中)
②根据条件对页面模糊查询的数据进行加密并存储在中
在这种情况下,可以使用内存分页来查询内存,然后在解密之后,它将与前端传递的搜索词进行模糊匹配。实际上支持加密和解密,但是当前的数据加密不使用方法。另外,在实际使用情况下,表中的数据量很小,因此一次查询内存要比执行解密更快。全面考虑使用内存分页更为合理。

实施方法
在Java8中使用Steam的.skip()和limit()实现
/**
* 内存分页
*
* @param data 数据
* @param pageNum 当前页
* @param pageSize 分页条数
* @return
*/
public List通过上述内存分页操作,提高了项目数据查询的效率,并减少了对sql的限制错误。对于少量加密数据的前端模糊查询,也具有较好的表示效果。
作者简介:肖文文,Huxiao E Smart Office()开发工程师,专注于移动办公软件SaaS平台的构建和轻型应用程序的开发
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-377571-1.html
中国没有像样的民族工业
没赚什么大钱
不爆炸是因为是穿甲弹