gpt4 book ai didi

java - 在 GAE 上实现新闻提要——我应该使用 Prospective Search 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:55:50 24 4
gpt4 key购买 nike

我有一个问题困扰了我一段时间。我正在尝试使用 GAE 云端点和 java 在我的应用程序中实现新闻提要功能。常见的概念是 followers 和 followees,followee 的一个 Action 可以被他的 followers 看到。新的关注者还应该看到他的关注者过去的行为,而不仅仅是从他开始关注的那一刻起。

我尝试了以下组件。每次尝试都很好,但缺少一些东西:

  1. 在每个用户操作中,我在数据存储中添加了一个“日志”实体,其中包含用户 ID。当用户显示他的新闻提要时,我只是根据用户的关注者列表通过用户 ID 查询所有这些实体。一切都很好,直到我意识到无法游标“IN”查询。所以这个选项没有了。
  2. 在这次尝试中,我正在使用搜索 API,这也是应用程序的当前状态。在每次用户操作时,我不再将“日志”实体存储到数据存储中,而是将文档存储到搜索索引中。复杂的查询可以在这里光标,世界再次微笑。但是……我不太确定,在计费方面,这是一个明智的决定。似乎与 documented 一起搜索/添加/删除文档的成本每日限制使整个事情变得有点过于粗略。
  3. 下一个尝试应该是 Prospective Search API。根据我在 documents 中阅读的内容它似乎是为此目的选择的正确组件。不幸的是,文档真的很差,而且给出的例子也很少。账单信息也不清楚。

所以我向stackoverflow社区寻求建议。你能告诉我这件事吗?如果 Prospective Search 是正确的选择,您能否提供一些使用云端点的清晰示例 Java 代码?

编辑:这里只是为了强调主要设计要求 - 新闻提要功能需要能够使用游标获取已排序的关注者操作(以避免查询整个批处理)。

最佳答案

使用拉式聚合每个关注者模型:定期(或按需)查询所有关注者操作一次,然后将它们缓存在一个专用的每个关注者实体中。记住上次查询的时间,所以下次您只需从该点开始查询(假设不能添加/更改到过去的时间)。

这将为您提供以下功能(和限制):

  1. 如果查询是按需的,那么您将不需要查询不活跃的用户。
  2. 由于查询是“仅限新的”(仅查找新操作),如果它返回零结果,您将无需支付任何费用。
  3. 您只会查询每个关注者的每个关注者操作一次。之后,所有最近的操作都将缓存在一个实体中,并通过一次 get 加载到内存中。这应该可以节省大量成本和时间。
  4. 您可以按照自己的意愿对内存中的操作进行排序/过滤。

限制:

  1. 实体有 1MB 的限制,因此您可以在一个实体中缓存​​的操作数量上限。因此,您需要限制每个用户最近操作的缓存,或者将操作缓存分散到多个实体。
  2. 您将需要对关注者(最多 30 个)使用 IN 查询,并使用并行线程来获得不错的性能。当查询超过 1000-2000 个关注者时,这很容易达到 3-5 秒。此外,在同时为多个用户提供服务时,您很容易达到每个实例的 RPC 限制(即最大并发 API 调用数)。

关于java - 在 GAE 上实现新闻提要——我应该使用 Prospective Search 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20557651/

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