Java 当数据跨越多个块时,如何建模分页

Java 当数据跨越多个块时,如何建模分页,java,algorithm,database-design,Java,Algorithm,Database Design,我有一个一般性的问题,就是我从后端加载数据的块,即在页面中。我创建了一个缓存,一次最多存储2-3个页面。 说第1-1-1000页 第1001-2000页 class page{ List<Data>, startoffset, endoffset, pageno} 类页面{ 列表,开始设置,结束偏移,页码} 在这里,客户端可以是UI或任何其他服务 现在客户要求1-100101-200提供数据。在从一个页面开始提供范围之前,我可以通过从提供的范围计算页码来适应更改 若不存在第no页

我有一个一般性的问题,就是我从后端加载数据的块,即在页面中。我创建了一个缓存,一次最多存储2-3个页面。 说第1-1-1000页 第1001-2000页

class page{
List<Data>, startoffset, endoffset, pageno}
类页面{
列表,开始设置,结束偏移,页码}
在这里,客户端可以是UI或任何其他服务

现在客户要求1-100101-200提供数据。在从一个页面开始提供范围之前,我可以通过从提供的范围计算页码来适应更改

若不存在第no页,我可以从后端加载该范围并将其保存在缓存中

然而,当客户端请求在多个块上重叠的数据时,我面临这个问题。 示例-当客户要求第950-1050页时,数据跨越两页


关于在这种情况下如何对类/块建模的任何建议,即如何将服务器端数据以块的形式保存在内存中并将其发送到GUI。

我认为使用从DB获取的两个(甚至更多)连续块来覆盖ui请求的区域没有问题。您既可以热切地做,也可以懒散地做(也就是说,您会发现自己没有足够的行并获取额外的数据)。对于您尝试执行的流程,这是非常正常的情况。重叠始终存在于用户可以自由选择所需区域的情况下

您不能真正期望缓存部分数据,然后能够处理可能与缓存数据和非缓存数据重叠的请求。如果UI在100个项目页面中请求数据,那么直接从数据源获取数据是否太慢?缓存可能会给您带来更多的问题,而不是目前对您的帮助。@Kayaman我需要进行缓存,但是在我的应用程序中,我可以控制缓存哪部分数据。我的问题是->如何在服务器端设计能够处理重叠的数据请求。这实际上是缓存的基本思想:当缓存丢失时,您将无法获取它。当然,您可能希望最小化缓存未命中,但不可能预测所有场景。如果一个用户要求
950-1050
,另一个用户要求
949-1051
,您仍然会有缓存未命中。@r以后进行缓存可能会比较有利。如果首先设计缓存,可能会导致设计效率低下,这取决于是否知道实现使用缓存。如果您首先设计它,使它不使用缓存、优化查询并确保您没有做任何愚蠢的事情,那么您的工具箱中就剩下了缓存,以获得更好的性能。这就像在一辆装有微型发动机的汽车上安装加力燃烧室一样,你最好先调整汽车,然后再安装加力燃烧室。这样做的一个问题是,用户可能会请求介于
1
1000000
之间的页面,最终使用1000个缓存块。如果有更多的数据你不可能预测/缓存所有数据。@Anton Astafiev,我如何在用户可以自由选择所需区域的服务器端模拟这种secanrio?@ChatterOne,在我的应用程序I.e.中永远不会出现这种情况。cachine 100_000 pageslet假设了一些数字。UI请求Nu=Nend-Nstart行。如果只在预定义大小为M的块中加载数据(实际上不是很好),则需要将块从[Nstart/M]-th加载到[Nend/M]-th。这些数字是为了快速加载。您将这些块放入缓存,并为ui选择适当的区域。@AntonAstafiev如果固定块大小不是个好主意,您会建议什么其他策略>