Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 使用基于datetime或任何非键属性的范围的map reduce_Google App Engine_Mapreduce_Django Nonrel_Djangoappengine - Fatal编程技术网

Google app engine 使用基于datetime或任何非键属性的范围的map reduce

Google app engine 使用基于datetime或任何非键属性的范围的map reduce,google-app-engine,mapreduce,django-nonrel,djangoappengine,Google App Engine,Mapreduce,Django Nonrel,Djangoappengine,我希望能够使用Map reduce处理由datetime属性或任何非键属性排序的查询上的模型实体 看起来map reduce的关键因素是能够均匀地分割范围,并将范围缩小到最小范围“空间”(即,不是基于实体的数量,而是基于范围内可能的实体数量)。内置范围是一个键范围,GAE设计为均匀分布,并且每个键限制为1个 在任何其他属性上创建范围迭代器似乎也有两个可能的问题:(1)均匀分布;(2)任何给定值下的实体。以问题(2)为例,一个日期时间值可能有多个实体。这似乎造成了一个问题,即确定用于分割范围的批量

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

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

在任何其他属性上创建范围迭代器似乎也有两个可能的问题:(1)均匀分布;(2)任何给定值下的实体。以问题(2)为例,一个日期时间值可能有多个实体。这似乎造成了一个问题,即确定用于分割范围的批量大小


我的问题是:使用范围迭代器创建map reduce模型迭代器是否有一个切实可行的解决方案,该迭代器不基于模型键,并且可能既不均匀分布也不可预测任何范围的实体计数?

Mapreduce将尝试尽可能分割输入。在不等式查询的情况下,即:在时间戳X和Y之间。它将平均分割属性范围(如时间戳)。因此,如果时间戳的值分布不好,这将导致一些碎片比其他碎片获得更多的实体。这在某种程度上由于其取样过多而有所缓解。(即:每个分片接收多个非相邻范围)对于相等查询(即:其中Foo=Bar和Baz=Bat),它做得更好。它使用“\uuuu scatter\uuuuu”属性,该属性是一个随机应用于每512个实体中的1的值。它对这些对象进行查询,以通过keyspace获得实体分布的示例,然后相应地对keyspace进行分区。这显然不提供精确的分区,但因为它遵循数据的实际分布,而不是简单地假设均匀分布,所以在实践中它做得相当好