分离数据之间的分页

Pagination between separated data

我正在为这个问题烦恼。

我有 2 个独立的系统。

但是我需要做一个查询,需要系统 A 的数据来查询系统 B 的一些数据。

并且系统B的数据需要分页(每页20条记录)。

我可以通过在系统 A 中获取 100 条第一条记录,然后在系统 B 中查询,也许它可以从中获取 15 条记录,然后我需要在系统 A 中再获取 100 条记录来填充第 1 页系统B.

但是对于总页数,我认为我需要遍历系统 A 中的所有记录才能做到这一点。

我觉得每个系统都有百万条记录,这对产品来说是非常糟糕的。

请帮我解决这个问题。

非常感谢,抱歉我的英语不好。

在系统设计方面有多种解决方案。我首先想到的是创建一个 table,您可以让 id 从一个数据库中获取这些内容。一旦获得分页 ID 对两个数据库的查询。在 3 个查询中你会得到想要的结果。

第二个我能想到的是根据 id 进行分片。我不确定你的用例是什么,但如果你想为用户分页。确保在一个数据库中保存 1 个用户数据。在这种情况下你不需要去第二个数据库进行查询。

简短回答:使用数据库视图(并考虑物化视图)。

获取系统 A 的数据库,在系统 B 的数据库上建立一个 dblink,创建一个连接两个数据的视图(也考虑物化视图)。如果你有这个观点,在系统A中使用。

如果您无法创建 dblink,请创建一个定期(每晚?每小时?取决于您的要求)从系统 B 读取的 etl,存储在系统 A 的数据库中的 table 中,然后制作系统 A 中的一个视图以使用这些数据。

当你把所有数据都放在一个系统上时,你可以考虑一些内存数据库(如 Redis 或类似的)来存储关键数据并能够高效地查询这些“大数据”。

开始编码前需要考虑的事项:

  • 总是首先考虑你这样做的原因和频率:每分钟多少次等。
  • 你有数百万的数据,但数据增长呢?这些数据一个月会变成多少?一年?十年 ?
  • 不要对每个客户端请求都进行查询,而是尽可能缓存结果。并非每个客户端请求都应该调用两个数据库并考虑您的查询对系统 B 的影响有多大(如果这个系统也有一些限制,石灰率限制等。)
  • 也许您不想要所有数据(如所有列),而是想要数据的子集。不要对所有事情都进行“加入”,而是只考虑你真正需要
  • 的东西
  • 使用真实世界的数据进行测试,不要在本地机器/测试环境上停止
  • 假设最坏情况:10 倍数据,10 倍频率请求
  • 考虑如何记录所有这些以及如何分享这些知识。 Link 一个系统到另一个系统始终是您架构中的痛点