分隔数据之间的分页



我在这个问题上很麻烦。

我有两个独立的系统。

但我需要对一个需要来自系统a的数据的查询进行操作,以查询来自系统B的一些数据。

来自系统B的数据需要分页(每页20条记录(。

我可以在系统A中获得100条第一条记录,然后在系统B中查询,也许它可以从中获得15条记录,那么我需要在系统A再获得100条记录来填充系统B的第1页。

但对于整个页面,我想我需要循环系统A中的所有记录才能做到这一点。

我认为当我在每个系统中都有一百万张唱片时,这对刺激来说是非常糟糕的。

请帮我解决这个问题。

非常感谢并为我糟糕的英语感到抱歉。

简单答案:使用数据库视图(并考虑物化视图(。

以系统A的数据库为例,在系统B的数据库上构建一个dblink,创建一个连接两个数据的视图(也可以考虑物化视图(。如果您有此视图,请在系统A.中使用

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

当你在一个系统上拥有所有数据时,你可以考虑一些内存中的数据库(如Redis或类似的数据库(来存储关键数据,并能够查询这个";"大数据";高效。

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

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

在系统设计方面有多种解决方案。首先我可以想到的是创建一个表,让id从一个数据库中获取这些信息。一旦您将id的查询分页到两个数据库。在3个查询中,您将得到所需的结果。

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

最新更新