Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用';不在';_Java_Google App Engine_Google Cloud Datastore_Jdo - Fatal编程技术网

Java 使用';不在';

Java 使用';不在';,java,google-app-engine,google-cloud-datastore,jdo,Java,Google App Engine,Google Cloud Datastore,Jdo,我正在开发一个Google应用程序引擎Java应用程序,用户可以根据搜索条件从数据库中搜索业务对象。 搜索结果(记录列表)不应包括他们过去搜索的任何记录(一定数量的记录,比如100条)。出于这个原因,我将过去的结果存储在用户配置文件中。 关于有效实现此逻辑的任何建议(无需使用多个集合迭代)。我使用的是JDO,在查询中使用'NOT in'条件有一些限制。这里有一个解决方案,假设您的目标是获得200个尚未在历史记录中的密钥。 我将尝试估算作为“效率”代表的运营数量,因为这是我们在未来几年的收费方式

我正在开发一个Google应用程序引擎Java应用程序,用户可以根据搜索条件从数据库中搜索业务对象。 搜索结果(记录列表)不应包括他们过去搜索的任何记录(一定数量的记录,比如100条)。出于这个原因,我将过去的结果存储在用户配置文件中。
关于有效实现此逻辑的任何建议(无需使用多个集合迭代)。我使用的是JDO,在查询中使用'NOT in'条件有一些限制。

这里有一个解决方案,假设您的目标是获得200个尚未在历史记录中的密钥。 我将尝试估算作为“效率”代表的运营数量,因为这是我们在未来几年的收费方式

  • 获取用户对象和“历史记录键”(1次读取操作)
  • 执行仅密钥查询并获取300条记录。(300个小型作业)
  • 在代码中,从300条记录中减去任何历史键。(0次操作)
  • 如果在第3步后得到的记录少于200条,请再提取100条(必要时重复)(100个小操作)
  • 一旦有了200个以前没有见过的键,您就可以在需要时获取完整的业务对象实体,或者向用户显示这些键。(如果获取整个对象,则执行200次读取操作)
  • 如果数据存储支持本机“notin”操作符,那么我们可以从第2步中删除100个小操作,而跳过第4步。这里最大的成本是获取实际的200个实体,这必须在有或没有NOT IN操作符的情况下发生。最终,与本地非IN运算符相比,此方法的效率并没有那么低

    进一步优化:

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

    • 我只是在猜测我建议你一开始拿到300把钥匙。你可能需要得到更多或更少。你也可能在第二次尝试中得到少于100


    业务对象的总数有多大?您希望“已搜索”列表有多大?如果您不断使用已查看的搜索结果更新用户对象,听起来您的用户对象将变得巨大。搜索结果只是对象键(而不是实际的业务对象)。搜索历史记录将有500条搜索结果记录(仅限关键字),当添加新关键字时,旧历史记录将自动消失-仅保留500条记录关键字。每次搜索的搜索结果将限制为200条记录。这200条结果不应包括搜索历史记录中的500条记录中的任何一条。感谢您的时间。非常感谢您的时间和解决方案。如果我在第一次300次抓取中没有得到200条好记录(假设我只有100条好记录),那么在第二次抓取时,我必须将结果与500条历史记录和最初的100条好记录进行比较。(在连续的回迁中继续)您认为执行此收集操作会影响性能吗。?是否有任何数据存储解决方案可以解决此问题。即使使用Google原生数据存储API?@user969227,从代码中的(大)可能结果集中过滤出(小)排除的结果集也将比任何数据存储选项快得多。如果您是从头开始构建数据库,这仍然是最快的方法。除非您有重复的业务对象,否则您不必将您的数据库与最初的100个数据库进行比较。谢谢大家的时间和建议。谢谢你的帮助。