`

数据来自两个系统时的内存分页算法

    博客分类:
  • java
 
阅读更多
业务数据来自a-app与b-app,其中a-app中数据的业务时间早于b-app,现在需要对这两个来源的数据做内存分页查询。

public ResultGson<ProductPaginationBean> mergePaginationQuery(int pageNo, int pageSize) {
        ResultGson<ProductPaginationBean> productPaginationResultGson = new ResultGson<ProductPaginationBean>("000", "success", null);
        ResultGson<ProductPaginationBean> paginationOneResultGson = paginationOneQuery(pageNo, pageSize);
        ResultGson<ProductPaginationBean> paginationTwoBeanResultGson = paginationSecondQuery(pageNo, pageSize);
        int firstTotalCount = paginationOneResultGson.getData().getTotalCount();
        int secondTotalCount = paginationTwoBeanResultGson.getData().getTotalCount();
        int totalCount = firstTotalCount + secondTotalCount;

        int firstTotalPage = firstTotalCount / pageSize;
        int firstMode = firstTotalCount % pageSize;

        if (firstTotalPage > pageNo) {
            ProductPaginationBean productPaginationBean = new ProductPaginationBean(totalCount, paginationOneResultGson.getData().getProductDTOList());
            productPaginationResultGson.setData(productPaginationBean);
            return productPaginationResultGson;
        }

        if (firstTotalPage < pageNo) {
            ResultGson<ProductPaginationBean> productPaginationFirstResultGson = paginationSecondQuery(pageNo - firstTotalPage -1, pageSize);
            ResultGson<ProductPaginationBean> productPaginationSecondResultGson = paginationSecondQuery(pageNo - firstTotalPage, pageSize);
            List<ProductDTO> mergedProductList = mergeDataAfterRemoveDataOfFirstList(pageSize-firstMode, productPaginationFirstResultGson.getData().getProductDTOList(), productPaginationSecondResultGson.getData().getProductDTOList());
            ProductPaginationBean productPaginationBean = new ProductPaginationBean(totalCount, mergedProductList);
            productPaginationResultGson.setData(productPaginationBean);
            return productPaginationResultGson;
        }

        if (firstTotalPage== pageNo) {
            paginationOneResultGson = paginationOneQuery(pageNo, pageSize);
            paginationTwoBeanResultGson = paginationSecondQuery(0, pageSize);
            List<ProductDTO> productDTOList = mergeDataDeleteSomeIfPossible(paginationOneResultGson.getData().getProductDTOList() , paginationTwoBeanResultGson.getData().getProductDTOList() , pageSize);
            ProductPaginationBean productPaginationBean = new ProductPaginationBean(totalCount, productDTOList);
            productPaginationResultGson.setData(productPaginationBean);
            return productPaginationResultGson;
        }


        return productPaginationResultGson;
    }

    private List<ProductDTO> mergeDataAfterRemoveDataOfFirstList(int removeSize, List<ProductDTO> firstProductList, List<ProductDTO> secondProductList) {
        List<ProductDTO> resultProductList = new ArrayList<>();
        if (firstProductList.size() > removeSize) {
            resultProductList.addAll(firstProductList.subList(removeSize, firstProductList.size()));
        }

        int cutSize = removeSize > secondProductList.size() ? secondProductList.size() : removeSize;

        resultProductList.addAll(secondProductList.subList(0, cutSize));
        return resultProductList;
    }

    private List<ProductDTO> mergeDataDeleteSomeIfPossible(List<ProductDTO> firstProductList, List<ProductDTO> secondProductList, int pageSize) {
        List<ProductDTO> resultProductList = new ArrayList<>();
        resultProductList.addAll(firstProductList);
        resultProductList.addAll(secondProductList);

        if (resultProductList.size() > pageSize) {
            resultProductList = resultProductList.subList(0, pageSize);
        }

        return resultProductList;
    }
分享到:
评论

相关推荐

    操作系统实验2 分页置换算法

    当一个进程运行时,不是所有的页都会立即加载到内存中,而是根据需要进行动态加载,这就引出了分页置换算法。 置换算法是决定哪些页面应该被换出内存,以便为新的页面腾出空间的关键机制。在"操作系统实验2 分页...

    操作系统内存分页机制的实现

    操作系统内存分页机制是现代计算机系统中用于管理内存的关键技术之一。它将物理内存分割成固定大小的块,称为页,然后将这些页映射到进程的虚拟地址空间中的页框,实现虚拟地址到物理地址的转换。在这个过程中,VC++...

    操作系统课程设计动态内存分配算法

    操作系统课程设计中的动态内存分配算法是一项关键的技能,它涉及到计算机系统如何有效地管理内存资源,以满足程序运行时的需求。动态内存分配允许程序在运行时请求和释放内存,而不是在编译时固定内存大小。这样的...

    Linux内存分页机制原理

    4. **页面置换算法**:当系统内存不足时,内核会使用页面置换算法决定哪些页面应该被换出到磁盘,以便释放更多的物理内存供其他页面使用。 #### 六、总结 通过深入探讨Linux内存分页机制原理,我们可以清楚地了解...

    请求分页系统页面淘汰算法

    ### 请求分页系统页面淘汰算法 #### 一、实验背景及目标 在现代计算机系统中,内存管理和虚拟存储技术是操作系统的重要组成部分。其中,请求分页系统是一种常用的虚拟存储技术,它允许进程只将部分页面加载到物理...

    操作系统 c/c++ 分页式存储管理

    操作系统中的分页式存储管理是内存管理的一种策略,它的核心目标是解决主存与辅存之间的数据交换问题,以提高内存利用率和系统效率。在分页系统中,内存被划分为固定大小的页框,而程序则被分割为同样大小的页。这种...

    操作系统实验报告 用C++实现页面置换算法,LRU与FCFS

    页面置换算法是操作系统中请求分页存储管理的关键组成部分,它负责决定当一个页面需要被访问,但该页面不在内存中时,应该将哪个页面替换出去。这一技术用于虚拟内存管理,可确保计算机系统在有限的物理内存下能运行...

    海量数据库的查询优化及分页算法方案 - CSDNBlog

    在IT行业中,数据库查询优化与分页算法是两个至关重要的主题,特别是在处理海量数据时。本文将深入探讨这两个方面,帮助你理解如何有效地管理和检索大规模数据库中的信息。 首先,我们来谈谈**数据库查询优化**。当...

    操作系统基本分页存储系统

    操作系统中的基本分页存储系统是内存管理的一种方法,它将主存划分为固定大小的块,称为页框,同时将进程的虚拟地址空间也分割成相同大小的块,称为页。这种技术的主要目的是解决内存碎片问题,提高内存利用率,并...

    模拟系统请求分页式存储管理

    在操作系统中,分页式存储管理是一种常用的内存管理方式,它将进程的虚拟内存分割成固定大小的块,称为页,而物理内存也被划分为相同大小的块,称为页框。这种管理方式使得进程和物理内存之间的地址转换变得简单且...

    C 分页管理内存 (操作系统实验)

    本实验“C分页管理内存”旨在通过编程模拟来深入理解分页内存管理系统的工作原理,特别是聚焦于FIFO(先进先出)和LRU(最近最少使用)两种替换算法,以及如何计算它们的缺页率和命中率。 首先,我们要了解分页系统...

    高老师的算法分页

    高老师的算法分页是这个话题的一个具体实例,它涉及到如何有效地处理和展示大量的数据,以便用户可以方便地浏览和访问。在这个场景下,“假分页”和“数字分页”是两种不同的分页实现方式。 首先,我们来详细了解...

    计算机操作系统的十大算法

    2. **内存管理算法**:分页和分段是两种主要的内存管理方式。最佳适配、最坏适配和首次适配是用于内存分配的常见算法,它们在动态内存分配中起作用,帮助有效地使用内存空间。 3. **磁盘调度算法**:磁盘调度负责...

    课程设计:采用lfu算法仿真请求分页系统.doc

    数据结构模块包括功能和数据结构两个部分,其中功能部分负责记录页面的使用频率,数据结构部分负责存储页面的使用频率信息。 在课程设计中,学生需要设计和实现一个LFU算法仿真请求分页系统,包括设计算法、实现...

    操作系统(模拟分页式存储管理中硬件的地址转换和产生缺页中断并用FIFO处理)

    总结,操作系统中的分页式存储管理和硬件地址转换是提高内存利用率和效率的重要手段,而面对缺页中断时,FIFO等页面调度算法则是保障系统性能的关键决策机制。理解这些概念并能够通过编程模拟其工作过程,对于深入...

    实习三 内存页面置换算法的设计(内附代码)

    当进程运行过程中需要访问的数据不在内存中时,会发生“缺页”中断,系统会通过特定的算法选择内存中的某一页淘汰,以便将所需页面调入内存。 #### 三、LRU置换算法详解 **LRU置换算法原理:** LRU(Least Recently...

    采用先进先出FIFO或LUR算法实现分页管理的缺页调度.doc

    根据给定文件的信息,本文将深入探讨两种不同的页面替换算法——先进先出(FIFO)算法与最近最少使用(LRU)算法,并通过具体的代码示例来解释如何在分页管理系统中实现这两种算法以处理缺页调度问题。 ### 一、...

    操作系统实验 采用先进先出和LRU算法,实现分页管理的缺页调度 文档+实验目的+原理+内容+结果+小结

    实验分为两个部分,分别实现FIFO和LRU算法。程序接收用户输入的页面访问序列,然后模拟缺页过程,并记录结果。 1. FIFO算法: - 输入页面访问序列,检查页表,如果访问的页面不在内存中(缺页),则设置缺页标志为...

    操作系统分页地址变换

    操作系统分页地址变换是操作系统中的一种重要机制,它允许操作系统将逻辑地址转换为物理地址,以便在计算机中存储和访问数据。通过分页地址变换,操作系统可以将大型程序分解成小的、独立的页,以便更好地管理内存...

    采用先进先出FIFO或LUR算法实现分页管理的缺页调度.docx

    在实现FIFO和LRU算法时,需要使用适当的数据结构来存储页面信息。例如,可以使用数组来存储页面信息,并使用标志来标记页面是否在内存中。在算法中,需要使用循环来遍历页面信息,检查页面是否在内存中,并进行相应...

Global site tag (gtag.js) - Google Analytics