gpt4 book ai didi

c# - 过滤、合并、排序和分页来自多个来源的数据

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:06 25 4
gpt4 key购买 nike

目前我正在通过一种检索 IQueryable<T1> 的方法从数据库中检索数据、过滤、排序然后对其进行分页(所有这些基本上都在数据库上),然后将结果返回到 UI 以在分页表中显示。

我需要整合来自另一个数据库的结果,分页似乎是主要问题。

  • 模型相似但不相同(相同的字段,不同的名称,在返回之前需要映射到通用领域模型);
  • 不可能在数据库级别加入;
  • 目前两个数据库之间大约有 1000 条记录(在过去 18 个月),并可能以大致相同的速度增长(缓慢)步调;
  • 结果始终需要按 1-2 个字段(按日期)排序。

我目前在这两种解决方案之间左右为难:

  1. 从两个来源检索所有数据,合并、排序然后缓存它们;然后在接收请求时简单地在所述缓存上进行过滤和分页 - 但我需要在修改集合时使缓存无效(我可以这样做);
  2. 在每个源上过滤数据(同样是在数据库级别),然后在返回之前检索、合并、排序和分页它们。

我正在寻找一种性能不错的算法。理想的解决方案可能是它们之间的组合(在数据库级别缓存 + 过滤),但目前我还没有全神贯注。

最佳答案

我想你可以使用下面的算法。假设你的页面大小是 10,那么对于第 0 页:

  1. 从数据库 A 中获取 10 个结果,在数据库级别进行过滤和排序。
  2. 从数据库 B 中获取 10 个结果,在数据库级别进行过滤和排序(与上述查询并行)
  3. 合并这两个结果,得到 10 条正确排序的记录。因此,您对 20 条记录进行了排序,但只取其中的前 10 条并显示在 UI 中

然后对于第 1 页:

  1. 注意您在上一步中用于在 UI 中显示的数据库 A 和 B 中有多少项目。例如,您使用了数据库 A 中的 2 个项目和数据库 B 中的 8 个项目。
  2. 从数据库 A 中获取 10 个结果,进行筛选和排序,但从位置 2 开始(跳过 2),因为这两个结果已在 UI 中显示。
  3. 从数据库 B 中获取 10 个结果,过滤并排序,但从位置 8 开始(跳过 8)。
  4. 以与上述相同的方式合并,从 20 条记录中获取 10 条记录。假设现在您使用了 A 中的 5 条记录和 B 中的 5 条记录。现在,您总共显示了 A 中的 7 条记录和 B 中的 13 条记录。使用这些下一步的数字。

这将不允许(轻松)跳过页面,但据我所知,这不是必需的。

性能应该与查询单个数据库时相同,因为可以并行查询 A 和 B。

关于c# - 过滤、合并、排序和分页来自多个来源的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40523216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com