gpt4 book ai didi

java - 在大型谷歌应用程序引擎表中选择不同的实体

转载 作者:行者123 更新时间:2023-12-01 05:49:52 25 4
gpt4 key购买 nike

我想知道是否有人可以帮助我解决这个问题。

我们有一个想要实现的想法,但目前无法有效地实现。

我已尽可能对数据进行匿名处理,但结构是相同的。

我们有两个实体:Car 和 CarJourney。每辆车都有 0 到多个 CarJourney。每个汽车旅程(除其他属性外)都有一个与之关联的日期 - 旅程开始的日期。

我想按乘车时间查询。我将有两个时间,一个开始日期和一个结束日期,其中开始日期 <= endDate,并且我希望收到该期间最近开始的旅程。

因此,如果我心里有一辆特定的汽车,比如 123 号汽车,我会编写一个由 Car.key 和 Car.startDate 限制的查询,其中 Car.key == 123 且 Journey.startDate >= startDate 和Journey.startDate <= endDate,按 Journey.startDate 降序排序,限制为 1。

例如A 车有 3 次行程,分别在每月 1 日、2 日和 3 日进行。查询开始日期为 1 日,查询结束日期为 2 日。该查询的结果将是一次汽车旅行,即第二次。

返回该查询的结果后,将进行非常少量的处理以将结果返回给用户。

这很简单。

但是,我想要一个汽车列表,而不是超过 1 辆汽车,其中该列表包含 N 个汽车 key 。

所以,我想运行上述查询 N 次,每辆车运行一次。我想要每辆车的最新行程。

由于时间范围是灵活的(因此无法事先知道),我们无法实现“isMostRecent”标志,因为虽然它可能是目前最新的,但它可能不是最近的指定日期参数。

我们还需要确保它能够及时返回(对于一小部分数据,当前查询大约在 3-5 秒左右),因为它会直接返回给用户。这意味着我们不能使用任务队列,并且由于指定的日期是任意的,我们无法实现“isWithinDate”字段的批量索引。

我们尝试使用异步查询,但由于处理量可以忽略不计,瓶颈仍然是数据存储上的查询(因为异步 API 仍然同步发送请求,只是不会阻塞)。

理想情况下,我们会将其实现为按 startDate 订购的汽车旅程的选择,其中 Car.key 是不同的,但我们似乎无法在 GAE 中实现这一点。

我们可以进行许多小的优化(例如,对重复查询进行一些 MemCaching),但没有一个对我们的查询时间产生重大影响。而 MemCaching 最多只能提供 1-2 分钟的帮助(由于时间不可避免地向前推进!)

任何想法都受到欢迎和高度赞赏。

谢谢,埃德

最佳答案

听起来最好的选择是自己执行许多查询。您说您尝试了异步查询,但瓶颈在于发送查询。这看起来非常奇怪 - 您应该能够同时进行许多查询,从而大大减少延迟。您是如何确定这一点的?

关于java - 在大型谷歌应用程序引擎表中选择不同的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4993744/

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