使用基于日期时间或任何非键属性的范围map reduce



我希望能够使用Map-reduce来处理按datetime属性或任何非键属性排序的查询的模型实体。

看起来map reduce的关键因素是能够均匀地分割范围,并减少到最小的范围"空间"(即,不是基于实体的数量,而是基于范围内可能的实体数量)。内置范围是一个键范围,GAE将其设计为均匀分布,并且每个键限制为1。

看起来在任何其他属性上创建范围迭代器都有两个可能的问题:(1)均匀分布;(2)任意给定值的实体个数。以问题(2)为例,一个日期时间值可能有多个实体。这似乎造成了划分范围时确定批处理大小的问题。

我的问题是:是否有一个实用的解决方案来创建一个映射减少模型迭代器与范围迭代器不基于模型键,可能既不均匀分布也不可预测的实体计数任何范围?

Mapreduce将尽可能分割输入。对于不等式查询IE:在时间戳X和y之间,它将平均分割属性范围(如时间戳)。因此,如果时间戳的值分布不好,这将导致一些分片获得比其他分片更多的实体。这在一定程度上被过采样的事实所缓解。(IE:每个分片接收多个非相邻范围)对于相等查询(IE: Foo=Bar和Baz=Bat)它做得更好。它使用"__scatter__"属性,该属性是一个随机应用于每512个实体中的1的值。它对这些进行查询,以通过keyspace获得实体分布的样本,然后相应地对keyspace进行分区。这显然不能提供精确的分区,但由于它遵循数据的实际分布,而不是简单地假设一个均匀分布,因此在实践中它做得相当好。

相关内容

  • 没有找到相关文章

最新更新