应用程序的发动机:13StringPropertys与1StringListProperty(w。r.t.索引/存储和查询的效)

StackOverflow https://stackoverflow.com/questions/1220794

一点点的背景下第一: 地质 是一个图书馆,我写了,增添了非常基本地理空间信息索引以及查询功能的应用程序的发动机应用程序。它是相似的方法来geohashing.相当于位置散在地质被称为'土工格室.'

目前,地质图书馆增加了13性质(位置_土工格室__正_, n=1..13)每个位置的感知的实体。例如,一个实体可以拥有财产的价值,例如:

location_geocell_1 = 'a'
location_geocell_2 = 'a3'
location_geocell_3 = 'a3f'
...

这是必需的,以便不要使用一个不平等过滤器在空间查询。

问题13-性质的做法是,对于任何地理查询一个程序,想运行,13个新的索引,必须定义和建造。这绝对是一个维护理想,正如我已经痛苦地意识到同时改写演示应用程序的项目。这导致我的第一个问题:

问题1: 是否有任何重大的储存开销的每个指数?即如果我有13个索引n实体中的每一个,对1指数与13n实体,是前者更糟糕的比后一条款的存储?

这似乎是回答(1)是否定的,每 这篇文章, 但我只是想看看如果任何人有不同的经验。

现在,我正在考虑调整的地质图书馆以代替13串的性质,我只是一个StringListProperty称为location_geocells,即:

location_geocells = ['a', 'a3', 'a3f']

这导致一个更清洁的 index.yaml.但是,我做个问题的性能的影响:

问题2: 如果我切换从13串性为1StringListProperty,将查询性能会受到不利影响;我当前的过滤器看起来像:

query.filter('location_geocell_%d =' % len(search_cell), search_cell)

和新的过滤器,将是这样的:

query.filter('location_geocells =', search_cell)

注意第一个查询有一个搜索空间;实体,而第二个查询有一个搜索空间的_13n_实体。

这似乎是回答(2)这两个结果是在平等的查询性能、每小#6 这篇文章, 但我想看看如果任何人有任何不同的现实世界的经历与此有关。

最后,如果任何人有任何其他建议或技巧,可以有助于改善利用存储查询,查询业绩和/或使用便利(具体而言w。r.t.索引。其),请不要让我知道!该来源可以在这里找到 地质 & geomodel.py

有帮助吗?

解决方案

您是正确的,有没有显著的开销每个索引 - 13N条目在一个索引或多或少相当于N个项目在13个指标。有100总指数数量限制,虽然如此,这吞噬了您的可用指标的公平块。

这就是说,使用的ListProperty肯定是从可用性和索引消耗观点远远优于方法。还有就是,你应该,查询一个小索引和一个更大的索引,假设这两个查询之间没有性能差异返回相同的行数。

我能想到的,使用单独的属性的唯一原因是,如果你知道你只需要在细节上一定水平的指标 - 但这种情况可能在插入时通过指定要添加到细节的水平来实现更好列表在首位。

请注意,在这两种情况下,你只需要索引,如果你打算在一个排序顺序或不等式过滤器一起查询土工格室性,但 - 。在所有其他情况下,自动分度就足够了。

其他提示

  
    

最后,如果任何人有任何其他建议或提示,可以帮助提高存储利用率,查询性能和/或易用性

  

在StringListproperty是去上述原因的方式,但在实际使用中一个可能要添加土工格室到那些自己以前存在的StringList这样一个可以查询对多个属性。

所以,如果你要提供一个较低的水平API,它可以与像的纸币卡茨的

def point2StringList(Point, stub="blah"):
    .....
    return ["blah_1:a", "blah_2":"a3", "blah_3":"a3f" ....]

def boundingbox2Wheresnippet(Box, stringlist="words", stub="blah"):
    .....
    return "words='%s_3:a3f' AND words='%s_3:b4g' ..." %(stub)

etc.

看起来像你这样结束了13个指数,因为你编码在hex(人可读性/地图的水平?).如果你利用的全部潜力的一个字节(字节字符串),你会有256细胞,而不是16个单元每个字符的(byte).有通过降低到远远较少量的指标相同的精确度。

字节字符串 仅仅是一个亚类的str和索引的同样,如果小于500bytes长。

然而数量的水平可能是较低;我4或5级,实际上是不够好,大多数情况下,在'地球.对于一个更大的行星或编目时每个砂粒子,多部门可能无论如何需要引入无关编码使用。在任何情况下字节字符串好于进制编码。并有助于减少索引 基本上.

  • 表4亿低(est)等级的细胞,我们所需要的是4个字节或者只是 4指数.(从基本的计算机拱或存储解决).
  • 对于代表一样,我们需要 16 六位数字或 16指数.

我可能是错误的。可以将数量指数水平相匹配的地图放水平都更加重要。请纠正我。计划试试这个,而不是六角如果只有一个(其他)的人在这里发现这个意义:)

或者一个解决方案,具有较少的大型细胞(16)但是,更多(128,256)作为我们下去的层次结构。任何想法?

例如:

  • [0-15][0-31][0-63][0-127][0-255] 给1G低水平细胞用5个指数与log2减量的大小。
  • [0-15][0-63][0-255][0-255][0-255] 给16G低水平细胞5指标。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top