我是刚从学习IndexedDB过来的,所以Google Cloud Datastore的概念让我很困惑。
究竟如何存储数组和对象?
考虑一下这个场景。
{ category: 'football', keywords: ['foo', 'bar'] }
{ dinosaurs: { trex: { teeth: 'large' } } }
我到底应该如何构建数据库?
在IndexedDB中,你有 multiEntry
允许将一个数组中的所有关键字作为单独的条目存储。
对于数组。如果我想通过关键字进行搜索 我是否应该用 "种类 "关键字建立一个新的实体 并将每个关键字作为一个单独的实体来存储?我如何将它链接到它的相关类别?
对于对象。我是否应该把它存储为JSON字符串 然后在脚本中进行字符串化解码?
你可以在一个属性中保存一个Strings的列表。这个属性可以是有索引的,也可以是无索引的。
对于一个对象,你可以创建一个实体。
Entity entity = new Entity("dinosaurs");
entity.setProperty("type", "trex");
entity.setUnindexedProperty("teeth", "large");
这样你就可以指明哪些属性你想索引(需要额外的费用),哪些属性你想不索引。
上面的例子是使用 Java数据存储API,但你也可以使用一个框架,如 目标化 来管理你的对象和实体。
在Datastore上有一个相当不错的文档,而且有很多的 考试教程 可用。
在HTTP API中,一个Value可以包含一个值的列表。
{properties: {keywords: {list_value: [{string_value: 'foo'}, ...]}}}
或一个实体。
{
properties: {
dinosaurs: {
entity_value: {
properties: {
'trex': {entity_value: {properties: {teeth: {string_value: 'large'}}}
}
}
}
}
}
(请注意,实体_value的目前不能被索引)
你可以根据需要使用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()
);