2013-02-27 28 views
2

我似乎记得,每个存储的旧数据存储属性都有类似于2 的数据存储写入操作(DWO),并且可能还有一些取决于它们如何编制索引。与旧数据存储区属性相比NDB JsonProperty配额影响?

在旧的数据存储中,我经常存储所有不需要在JSON字符串中索引的内容,并将其存储为TextProperty以保存多个写入。

已经习惯于直接从数据存储保存和使用JSON中的所有内容,当切换到新应用的NDB时,我自然会使用NDB JsonProperty。

像往常一样,我第一次检查了我的配额限制(典型的自由配额限制用户体验?),并且注意到所有的数据存储区写入(完全由仅包含JsonProperties的模型组成)正在计划很多DWO配额。

立即想知道:根据JsonProperty的结构,GAE DataStore是否进行多次写操作?还是只是将整个属性blob存储到数据存储中,只需要一个“blob”存储所需的DWO?

我认为后者,并记得在文档中阅读,但大量的配额消耗(典型的自由配额限制用户偏执?),让我怀疑是否使用JsonProperty不如使用旧的数据存储并将JSON字符串保存为TextProperty - 这肯定是非结构化的斑点。

如果能够明确地清除这将是一件好事,因此我可以回到仅关注应用程序的“appengine承诺”。 :)

回答

4

数据存储是运行时不可知的,不知道是否有这样的东西,因为它不能根据您的数据进行索引/写入。在implementationJsonPropertyBlobProperty,只是使用json序列化和反序列化数据:

class JsonProperty(BlobProperty): 
    def __init__(self, name=None, compressed=False, json_type=None, **kwds): 

一个BlobPropertycan beindexed与否,也compressed与否:

class BlobProperty(Property): 
    _indexed = False 
    _compressed = False 
    def __init__(self, name=None, compressed=False, **kwds): 

看来你可能将compressedTrue的情况与缺省值False进行比较。尝试将其设置为True,也许发布一些原始数字进行比较(即使从db的案例中获得一些意义)。

UPDATE:

我不知道我是在这个很清楚,和Guido的评论后,很显然我不是。 您的ndb blob属性的数据存储写入将与您的db blob属性的数据存储写入完全相同。这些数字根据实体是否存在以及属性是否被索引而变化。我对compressed的评论是为了解决您可能已经困惑的任何其他性能/带宽/大小问题。

如果检出billing page,则存在从高级操作到低级操作的映射。有关你问我们什么都有:

  • 新实体认沽(每实体,无论实体大小):2个写入+ 2%的索引属性值写入每个组合索引值
  • + 1个写把(每单位)现有实体:1个写+ 4%修改索引属性值写入+ 2%的改性复合指数值
+0

大,谢谢你的答案写(和链接!)。我会进一步调查。 – 2013-02-27 05:38:12

+1

压缩与它无关 - 无论大小如何,都会计算DWO。索引确实很重要。但我会看看你的应用程序的其他部分。你有没有尝试过Appstats? – 2013-02-27 16:24:41

+3

此外,请检出dev_appserver数据存储区查看器(localhost:8080/_ah/admin)。查看数据存储实体时,您会看到一个额外的列,指出数据存储“写操作”的数量。当你用'indexed = True'改变属性的数量时,你会看到这个数字的变化(注意:'True'是默认值)。另请注意,在更改Model类以便将属性显式标记为'indexed = False'后,当数据存储删除索引行的索引行时,首次更新每个实体时仍会产生额外的DWO。 – 2013-02-27 17:56:28

相关问题