应用程序引擎Bulkloader更新实体而不是替换

2024-05-27 11:17:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在一个相对较大的数据集上执行数据存储的夜间更新(将公司数据的子集与GAE同步)。我一直在使用bulkloader,它可以完成这项工作,但写入成本确实在增加。因为我为每个实体指定键字符串,所以bulkloader实际上是为它加载的每个记录重写整个实体,在我的例子中,每个实体大约写90次。(这是一个大而扁平的数据集,有很多索引。)但是在我的数据集中,50个属性中只有6个在一夜之间发生了变化,所以我做了很多冗余的编写。你知道吗

我的第一个想法是保留前一天晚上构建的缓存,在其中循环更改,获取实体,然后对需要它的属性执行put()。这可以有效地减少写操作,但需要很长时间——即使在批处理put()时也是如此。用bulkloader加载整个数据集只需3分钟,而运行更新只需16-18分钟!(我正在使用远程API,顺便说一句)当我扩展时,这将不起作用。你知道吗

我试过用ndb.KeyProperty属性在我的模型中,只通过bulkloader更新更改过的字段,但这样我就失去了对keyProperty进行查询/排序的能力,而这正是我所需要的。你知道吗

我还尝试了StructuredProperties,它确实允许您查询/排序,但是structured属性不允许您为它设置ID,因此我不能只加载structured属性。你知道吗

那么…有没有办法让我减少这些写操作并保留我需要的功能?我可以使用bulkloader只更新更改吗?我需要重构我的数据集吗??你知道吗


Tags: 数据字符串实体属性排序put记录公司

热门问题