gpt4 book ai didi

google-app-engine - 谷歌应用引擎 : efficient large deletes (about 90000/day)

转载 作者:太空宇宙 更新时间:2023-11-03 15:35:46 25 4
gpt4 key购买 nike

我有一个只有一个模型和两个 StringProperties 的应用程序。

实体的初始数量约为 1 亿(我将使用批量加载程序上传这些实体)。

我必须每 24 小时删除大约 70000 个实体并添加 100000 个实体。我现在的问题是:删除这些实体的最佳方法是什么?

有没有办法避免在删除实体之前获取实体?我找不到做类似事情的方法:

DELETE from xxx WHERE foo1 IN ('bar1', 'bar2', 'bar3', ...)

我意识到应用引擎提供了一个 IN 子句(尽管最大长度为 30(因为每个 GQL 查询的最大单个请求数 1 )),但对我来说这仍然很奇怪,因为我将不得不获取 x 个实体,然后再次删除它们(每个实体进行两次 RPC 调用)。

注意:如果找不到该实体,则应忽略该实体。

编辑:添加了有关问题的信息

这些实体只是域。第一个字符串是 SLD,第二个是 TLD(无子域)。该应用程序可用于执行类似 http://[...]/available/stackoverflow.com 的请求。应用程序将返回一个 True/False json 对象。

为什么我有这么多实体?因为数据存储包含所有注册域(目前为 .com)。由于 TOS 和延迟,我无法在所有情况下都执行 whois 请求。所以我最初用整个区域文件填充数据存储,然后每天添加/删除已注册/删除的域......问题是,这些数量非常大,我必须想办法降低成本每天添加/删除 2*~100000 个域。

注意:几乎没有任何计算在进行,因为可用性请求只是检查域是否存在于数据存储中!

1 :“任何单个 GQL 查询最多允许 30 个数据存储查询。” ( http://code.google.com/appengine/docs/python/datastore/gqlreference.html )

最佳答案

如果您还没有这样做,您应该为此使用 key_names

你需要一个像这样的模型:

class UnavailableDomain(db.Model):
pass

然后您将像这样填充您的数据存储:

UnavailableDomain.get_or_insert(key_name='stackoverflow.com')
UnavailableDomain.get_or_insert(key_name='google.com')

然后您将使用以下内容查询可用域:

is_available = UnavailableDomain.get_by_key_name('stackoverflow.com') is None

然后当你需要删除一堆域,因为它们已经可用时,你可以构建一个大的键列表,而不必像这样先查询数据库:

free_domains = ['stackoverflow.com', 'monkey.com']
db.delete(db.Key.from_path('UnavailableDomain', name) for name in free_domains)

如果您的 free_domains 列表真的很大

关于google-app-engine - 谷歌应用引擎 : efficient large deletes (about 90000/day),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6972443/

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