python-确定数据集中是否存在一组键的最佳方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-确定数据集中是否存在一组键的最佳方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1168字,纯文字阅读大概需要2分钟。
内容图文
![python-确定数据集中是否存在一组键的最佳方法](/upload/InfoBanner/zyjiaocheng/651/f3b664b6137147bdb3550a87f9f0e5c2.jpg)
我已经预先计算了几百个相同模型的密钥:
candidate_keys = [db.Key(...), db.Key(...), db.Key(...), ...]
其中一些键引用数据存储中的实际实体,而有些则不.我想确定哪些键确实对应于实体.
不必知道实体中的数据,只需知道它们是否存在即可.
一种解决方案是使用db.get():
keys_with_entities = set()
for entity in db.get(candidate_keys):
if entity:
keys_with_entities.add(entity.key())
但是,此过程将从存储中获取所有实体数据,这是不必要且昂贵的.
第二个想法是对key_name使用带有IN过滤器的查询,以30个块为单位手动获取以符合IN伪过滤器的要求.但是,IN过滤器不允许仅键查询.
有没有更好的办法?
解决方法:
App Engine数据存储区不直接支持IN过滤器;它们是在客户端库中实现的一种便利.包含30个值的IN查询将转换为每个值对应30个相等查询,从而产生30个常规查询!
由于往返时间以及什至仅键查询的开销,我怀疑您会发现,仅尝试一次批量获取所有实体是最有效的.但是,如果实体很大,则可以进行进一步的优化:对于插入的每个实体,请插入一个空的“存在”实体作为该实体的子代,并在查询中使用它.例如:
foo = AnEntity(...)
foo.put()
presence = PresenceEntity(key_name='x', parent=foo)
presence.put()
...
def exists(keys):
test_keys = [db.Key.from_path('PresenceEntity', 'x', parent=x) for x in keys)
return [x is not None for x in db.get(test_keys)]
内容总结
以上是互联网集市为您收集整理的python-确定数据集中是否存在一组键的最佳方法全部内容,希望文章能够帮你解决python-确定数据集中是否存在一组键的最佳方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。