当前位置: 首页 > 知识库问答 >
问题:

从多个源创建分页

贾沛
2023-03-14

我需要创建一个带有分页的HTML表。数据来自两个不同的来源(可能是来自两个不同数据库的两个表,比如一个Oracle,另一个是MySQL),您不能使用JOIN select语句。为了使它更复杂,我需要以升序显示按时间戳排序的数据(其中一个属性是timestamp)。

例如,源A有45条记录,源B有55条记录。因此,该表将显示总共100条记录,但一次只显示15条记录。因此必须有7页(6页15条记录,1页10条记录)。

上面的例子总共有100条记录,这可能很容易让内存加载它们。但在实际生产中,它可能是数千或数百万张唱片。有人知道我可以使用的算法吗?我可以提供的参数是页码和每页记录的数量。

共有1个答案

沈嘉瑞
2023-03-14

据我所知,你关心的是记忆。

如果单个表(A和B)没有按时间戳排序,那么你需要将它们的所有记录合并到一个文件中,然后使用一些基于文件的排序算法(类似于MergeSort,在一次传递中你会得到排序的记录对,在第二次传递中你会得到排序4s等)。当您有一个文件,其中所有记录都按时间戳的升序排列时,您可以将其分成几页。

如果表已经排序,则需要将N个排序序列合并为一个。我建议您组织某种堆来跟踪N个源中哪一个具有最小时间戳的项。在伪代码中,它将如下所示:

for i=1,N
{
  Add the 1st record from each table to the Heap
}
while(Heap not empty)
{
  x = take the smallest item from the heap, noting which table j this record belonged to
  Add x to output
  if (the j-th table is not completely processed)
  {
    take the next value from the j-th table and insert it into the heap
  }
}

复杂性是O(M*logN),其中M是表中记录的总数,N是表的数量。只有当N足够大时(我猜是~100),整个堆才值得这么麻烦。否则我将使用线性搜索和O(N*M)。

 类似资料:
  • 问题内容: 我有三个表: 我正在尝试创建一个视图,例如: 到目前为止,这是我的代码。我认为这是不正确的: 一个问题是,存在的国家可能不在中。一年也是如此。存在的年份可能不存在。因此,我一直认为上述代码无法正常工作。 问题答案: 谢谢您的帮助。这就是我为了使它工作而最终要做的事情。

  • 我有一个分区的Hive表。如果我想从这个表中创建一个spark数据帧,那么将创建多少个数据帧分区?

  • 如果不检查If语句中的myRange值,它不会给出错误,但不会创建pendingIntent2和PendingIntent3。 我尝试发送不同的请求代码,但它没有工作。

  • 我正在使用WebSphere Liberty(wlp)和JAX-RS开发一个服务。我想在我的服务中运行多个计划程序,定期执行不同的任务。我已经安装了Concurrent-1.0特性,并定义了 在实现的init类中 如何在其他类中创建更多实例? 我可以找到的指针,例如:http://www.adam-bien.com/roller/abien/entry/injection_an_executors

  • 在一个字符串中传递路径、用户名、密码和所有选项可以方便地创建到数据库的连接。有没有办法从一个URL创建数据源对象?也许可以从开放的SQL连接创建数据源?

  • 问题内容: 我想用Python(不是数组)中的一个创建10个变量。像这样: 我想创建的变量名,在这种情况下: ,,,…, 我不想一个数组 我有一个坐标图(640 x 480)。我正在确定像素颜色为白色的坐标。地面上有3个球,我想获取每个球的中心坐标,因此,如果要评估的坐标距离最后一个球很近,则x和y坐标将被平均(如果该坐标属于a)新球的坐标将属于新坐标组。 问题答案: 您不应该这样做,但是如果您真