我有一个帐户密钥,我在处理项目时会检查它。此密钥可防止我花时间处理不再有效的项目。在处理的内部循环中,我验证我仍然可以找到我正在处理的密钥。
实体定义:
class AuthorizedKey(ndb.Model):
secret_key = ndb.StringProperty()
...additional fields...
我用来检查的代码:
authorized_key = AuthorizedKey.query(AuthorizedKey.secret_key == first_key).get()
first_key 是一个字符串,它与已验证且位于数据存储区中的 AuthorizedKey 实体匹配。根据密钥,它在数周或数月内没有被修改过。
此查询定期无法检索结果。大约万分之一。错误似乎分布在键之间(即问题不在于一条记录)。
关于如何摆脱这些错误的任何建议?我需要存储在 AuthorizedKey 中的信息才能准确处理请求。如果传入的数据没有密钥,我想尽快停止处理它。
更新 --- 与查询匹配的记录通常在使用前几天创建。这些记录平均存在几个月。他们已经工作了数百万次,以前存在过,并且继续存在。有时,对 get() 调用的响应是无。
虽然多条记录都出现了这个问题,但一条特定记录在创建后大约 2 天就一直被访问。几天前我刚刚在内部循环上添加了监控代码。没有返回错误信息。
"if not authorized_key:"
在上面的代码大约每 10,000 次返回 False 之后。在工作之前和之后访问。一个具有与我的论点相匹配的 secret_key 的实体已经存在了将近 8 个月,并且已成功访问了数百万次。这就是我提出问题的原因,寻求帮助。在这种情况下,我悄悄地失败了,稍后会自动重试。重试工作正常。完全一样的数据。
除了这个问题的奇怪性质之外,我担心的主要原因是:
- 核心系统的可靠性
- 系统的其他区域可能不会像这个区域那样优雅地退化。