gpt4 book ai didi

java - 使用 'NOT IN' 的备用逻辑的 Google App Engine JDO 查询

转载 作者:行者123 更新时间:2023-12-01 15:43:34 25 4
gpt4 key购买 nike

我正在开发一个 Google App Engine Java 应用程序,用户可以根据搜索条件从数据库中搜索业务对象。搜索结果(记录列表)不应包含其过去搜索的任何记录(一定数量的记录,例如 100 条)。出于这个原因,我将过去的结果存储在用户配置文件中。有关有效实现此逻辑(不使用多个集合迭代)的任何建议。我正在使用 JDO,并且在查询中使用“NOT IN”条件有限制。

最佳答案

这里有一个解决方案,假设您的目标是获取 200 个不在历史记录中的 key 。我将尝试估计用作“效率”代理的操作数量,因为这就是 new pricing model 中我们的收费方式。

  1. 获取 User 对象和“历史键”(1 次读取操作)
  2. 仅执行一个键查询并获取 300 条记录。 (300 个小操作)
  3. 在您的代码中,从 300 条记录中减去任意历史记录键。 (0 次操作)
  4. 如果第 3 步后您得到的记录少于 200 条,请再获取 100 条记录。(如有必要,请重复)(100 个小操作)。
  5. 一旦您拥有 200 个以前未见过的键,您就可以在需要时获取完整的业务对象实体,或者向用户显示这些键。 (如果获取整个对象,则需要 200 次读取操作)

如果数据存储支持 native “NOT IN”运算符,那么我们可以从步骤 2 中削减 100 个小操作,并跳过步骤 4。这里最大的成本将是获取实际的 200 个实体,这必须在以下情况下发生:或没有 NOT IN 运算符。最终,与 native NOT IN 运算符的做法相比,此方法的效率并不是那么低。

进一步优化:

  • 如果您不需要一次显示 200 个键,那么您可以使用光标一次只获取 N 个结果。

  • 当我建议你首先获得 300 个 key 时,我只是猜测。您可能需要获得更多或更少。您在第二次尝试时也可能得到不到 100 分的结果。

关于java - 使用 'NOT IN' 的备用逻辑的 Google App Engine JDO 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7584773/

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