我似乎记得旧的数据存储区属性每个存储有2个数据存储区写操作(DWO),可能还有一些,具体取决于它们的索引方式。
在旧的数据存储区中,我经常将我不需要索引的所有内容存储在JSON字符串中,并将其存储为TextProperty以保存写入倍数。
我已经习惯了直接从数据存储中保存并使用JSON中的所有内容,当切换到新的应用程序的NDB时,我自然地使用了NDB JsonProperty。
像往常一样,我第一次检查配额限制(典型的免费配额限制用户体验?)时,我对优化变得偏执,并注意到所有数据存储区写入(完全由仅包含JsonProperties的模型组成)获得了大量的DWO配额。
我立刻想知道:GAE DataStore是否会根据JsonProperty的结构进行多次写入?或者它是否只是将整个属性blob存储到数据存储区中,只需要少量的“blob”存储所需的DWO?
我想到了后者,并记得在文档中阅读,但是大量的配额消费(典型的免费配额限制用户偏执?),让我想知道是否使用JsonProperty不如使用旧数据存储和将JSON字符串保存为TextProperty - 它们肯定是非结构化的blob。
如果能够明确地解决这个问题会很好,所以我可以回到仅仅在应用程序上关注的“appengine承诺”。:)
答案 0 :(得分:4)
数据存储区与运行时无关,并且不知道存在python
,ndb
或JSON这样的内容,因此它无法根据您的数据进行不同的索引/写入。在implementation中,JsonProperty
是BlobProperty
,只使用json
来序列化和反序列化数据:
class JsonProperty(BlobProperty):
def __init__(self, name=None, compressed=False, json_type=None, **kwds):
是BlobProperty
can be indexed
与否,还是compressed
与否:
class BlobProperty(Property):
_indexed = False
_compressed = False
def __init__(self, name=None, compressed=False, **kwds):
您似乎可能正在将compressed
为True
的情况与默认的False
进行比较。尝试将其设置为True
,并可能发布一些原始数字进行比较(甚至是db
案例中的某些数字以获得理解)。
我不确定我对此是否清楚,并且在Guido发表评论之后很清楚我不是。 您的ndb
blob属性的数据存储区写入与您的db
blob属性的数据存储区写入完全相同。这些数字会根据实体是否存在而更改,以及属性是否已编入索引。我对compressed
的评论是为了解决您可能感到困惑的任何其他性能/带宽/尺寸问题。
如果您查看billing page,则会有从高级操作到低级操作的映射。与您所询问的内容相关: