在Google Datastore中存储分层数据

时间:2015-05-28 15:08:37

标签: google-app-engine google-cloud-datastore

我有以下结构的数据:

{
  "id": "1",
  "title": "A Title",
  "description": "A description.",

  "listOfStrings": ["one", "two", "three"]

  "keyA": {
    "keyB": " ",
    "keyC": " ",
    "keyD": {
      "keyE": " ",
      "KeyF": " "
    }
  } 
}

我想在Google Datastore中添加/获取此功能。存储它的最佳方法是什么?

我应该使用实体组吗?

要求:

  • 我不需要交易。
  • 必须具备阅读整个结构的能力。
  • 必须能够根据KeyE内容进行查询。

此链接(Storing hierarchical data in Google App Engine Datastore?)提到使用实体组进行分层数据,但此链接(How to get all the descendants of a given instance of a model in google app engine?)提到它们只应用于交易,我不需要。

我正在使用这个库(我认为它不支持ReferenceProperty?)。 http://github.com/GoogleCloudPlatform/gcloud-ruby.git

2 个答案:

答案 0 :(得分:1)

如果您希望能够按层次结构进行查询(keyA-> keyB-> keyC) - 使用祖先,或只是一个看起来像这样的键来避免实体组限制。如果您希望能够查询包含提供的密钥的实体 - 创建一个计算属性,您将在其中存储存储在其中的密钥的平面列表。例如,将原始层次结构存储在JsonProeprty中。

答案 1 :(得分:0)

根据我的经验,你要求的实体越多(性能越低)。使用少量数据制作大量实体效率不高。相反,将整个层次结构存储为JsonProperty并使用代码来遍历它。

如果KeyE只是一个字符串,那么添加一个属性KeyE = StringProperty(indexed=True),以便您可以查询它。