0
|
greeness user1775765 · 技术社区 · 6 年前 |
![]() |
1
3
我建议用一种更具可扩展性(且成本更低)的方法来解决这个问题。 在您提到的用例中,您可以一次处理一个文档,每个文档在数据存储中都有相应的实体。 网页URL唯一标识页面,因此您可以使用它为各个实体生成唯一的键/标识符。通过单键查找(强一致性),您可以确定实体是否存在,即是否已考虑对网页进行爬网。如果没有,则会创建一个新实体并为其启动爬网作业。 实体键的长度可能是一个问题,请参阅 How long (max characters) can a datastore entity key_name be? Is it bad to haver very long key_names? 。为避免此问题,您可以将URL存储为网页实体的属性。然后,您必须通过url属性查询实体,以确定是否已考虑对该网页进行爬网。这只是 eventually consistent ,这意味着从创建文档实体(及其爬网作业启动)到它出现在查询结果中可能需要一段时间。这没什么大不了的,可以通过爬行作业中的一些逻辑来解决,以防止和/或删除文档重复。 我将“like”信息作为将文档映射到用户的小实体,与文档和用户实体分开,以避免在单个实体中维护可能很长的列表的缺点,请参阅 Manage nested list of entities within entities in Google Cloud Datastore 和 Creating your own activity logging in GAE/P 。 当用户喜欢具有特定URL的网页时,只需检查匹配的文档实体是否存在:
检查用户是否喜欢某个特定文档将成为一个此类映射实体的简单查询(需要谨慎,因为它最终也是一致的)。 有了这样的方案,您不再需要进行大量的查找,您一次只需进行一次—这没关系,一个用户一次只喜欢一个文档,这比提供一个大的喜欢文档列表更自然。 |
![]() |
Noah Watkins · ndb的控制索引。Expando模型属性 6 年前 |
![]() |
mooose · 如何使用服务帐户从应用程序脚本访问云数据存储 6 年前 |
![]() |
user2302244 · 从云存储读取大型文件并写入数据存储 7 年前 |