Javascript 谷歌云数据存储:存储阵列和对象
我刚刚学习IndexedDB,所以Google云数据存储的概念让我很困惑 如何准确地存储数组和对象 考虑以下情况:Javascript 谷歌云数据存储:存储阵列和对象,javascript,google-app-engine,google-cloud-datastore,Javascript,Google App Engine,Google Cloud Datastore,我刚刚学习IndexedDB,所以Google云数据存储的概念让我很困惑 如何准确地存储数组和对象 考虑以下情况: { category: 'football', keywords: ['foo', 'bar'] } { dinosaurs: { trex: { teeth: 'large' } } } 我应该如何构造数据库 在IndexedDB中,您有多条目,它允许将数组中的所有关键字存储为单独的条目 对于数组:如果我想按关键字搜索,我是否应该用“种类”关键字构建一个新实体,并将每个关键字存
{ category: 'football', keywords: ['foo', 'bar'] }
{ dinosaurs: { trex: { teeth: 'large' } } }
我应该如何构造数据库
在IndexedDB中,您有多条目
,它允许将数组中的所有关键字存储为单独的条目
对于数组:如果我想按关键字搜索,我是否应该用“种类”关键字构建一个新实体,并将每个关键字存储为单独的实体?我如何将其链接到相关类别
对于对象:是否应将其存储为JSON字符串,然后在脚本中对其进行字符串化/解码?您可以在单个属性中保存字符串列表。此属性可以索引,也可以取消索引 对于对象,可以创建一个实体:
Entity entity = new Entity("dinosaurs");
entity.setProperty("type", "trex");
entity.setUnindexedProperty("teeth", "large");
{
properties: {
dinosaurs: {
entity_value: {
properties: {
'trex': {entity_value: {properties: {teeth: {string_value: 'large'}}}
}
}
}
}
}
通过这种方式,您可以指示要为哪些属性编制索引(额外费用),以及要取消为哪些属性编制索引
上面的示例正在使用,但您也可以使用类似的框架来管理对象和实体
关于数据存储,有相当好的文档,并且有很多可用文档。在HTTP API中,一个值可以包含一个值列表:
{properties: {keywords: {list_value: [{string_value: 'foo'}, ...]}}}
或实体:
Entity entity = new Entity("dinosaurs");
entity.setProperty("type", "trex");
entity.setUnindexedProperty("teeth", "large");
{
properties: {
dinosaurs: {
entity_value: {
properties: {
'trex': {entity_value: {properties: {teeth: {string_value: 'large'}}}
}
}
}
}
}
(请注意,实体值当前无法编制索引)您可以根据需要使用GSON并序列化/反序列化: 写入实体:
Gson g=新的Gson();
实体=新实体(“恐龙”);
setProperty(“恐龙名称”,g.toJson(yourList));
entity.build();
读取实体数据:
Gson g=new Gson();
实体=datastore.get(key);
映射将其存储为JSON字符串,然后在脚本中对其进行字符串化/解码是一种简单、廉价的方法。如果列表存储为字符串,我将如何查询特定关键字?例如,我想要包含关键字“foo”的所有条目。如果您将其存储为字符串,然后执行JSON.loads
,您可以循环每个条目some\u var=json.load(my\u json\u str.json)
this\u val=some\u var['keywords'].get('foo')
如果this\u val…
。但是,这样做成本更高,效率更低。如果要在数据存储中查询包含“foo”的项,则需要对该查询进行索引,并将属性作为属性存储在数据存储中。最后一句话,这是否表示类似关键字:{foo:'football'}
?您使用一个简单的筛选器运算符。筛选器中的EQUAL:App Engine会将您正在搜索的值与列表中的每个值进行比较。否。它分别存储每个值-数据存储允许同一属性具有多个值。如果此属性已编制索引,则每个值也会记录在此类/属性的索引中,在该索引中可以通过查询找到。