谷歌云数据存储。存储数组和对象

问题描述 投票:1回答:3

我是刚从学习IndexedDB过来的,所以Google Cloud Datastore的概念让我很困惑。

究竟如何存储数组和对象?

考虑一下这个场景。

{ category: 'football', keywords: ['foo', 'bar'] }
{ dinosaurs: { trex: { teeth: 'large' } } }

我到底应该如何构建数据库?

在IndexedDB中,你有 multiEntry 允许将一个数组中的所有关键字作为单独的条目存储。

对于数组。如果我想通过关键字进行搜索 我是否应该用 "种类 "关键字建立一个新的实体 并将每个关键字作为一个单独的实体来存储?我如何将它链接到它的相关类别?

对于对象。我是否应该把它存储为JSON字符串 然后在脚本中进行字符串化解码?

javascript google-app-engine google-cloud-datastore
3个回答
2
投票

你可以在一个属性中保存一个Strings的列表。这个属性可以是有索引的,也可以是无索引的。

对于一个对象,你可以创建一个实体。

Entity entity = new Entity("dinosaurs");
entity.setProperty("type", "trex");
entity.setUnindexedProperty("teeth", "large");

这样你就可以指明哪些属性你想索引(需要额外的费用),哪些属性你想不索引。

上面的例子是使用 Java数据存储API,但你也可以使用一个框架,如 目标化 来管理你的对象和实体。

在Datastore上有一个相当不错的文档,而且有很多的 考试教程 可用。


1
投票

在HTTP API中,一个Value可以包含一个值的列表。

{properties: {keywords: {list_value: [{string_value: 'foo'}, ...]}}}

或一个实体。

{
  properties: {
    dinosaurs: { 
      entity_value: {
        properties: { 
          'trex': {entity_value: {properties: {teeth: {string_value: 'large'}}}
        }
      }
    }
  }
}

(请注意,实体_value的目前不能被索引)


0
投票

你可以根据需要使用GSON和serializedeserialize。

写入实体:


     Gson g = new Gson();

      Entity entity = new Entity("dinosaurs");
      entity.setProperty("DinosaurNames", g.toJson(yourList));

      entity.build();

读取实体的数据。

      Gson g = new Gson();

      Entity entity = datastore.get(key);
      Map<String, Value<?>> map = entity.getProperties();

      List<String> DinosaurNames = 
          gson.fromJson(
             map.get("DinosaurNames").get(), 
             new TypeToken<List<String>>(){}.getType()
          );
© www.soinside.com 2019 - 2024. All rights reserved.