我们的应用程序提供的功能使客户能够创建动态表单和业务规则。我们最近决定探索Google基础架构,因此我们不必花时间调整和调整基础架构。
到目前为止,我们已经使用NOSQL数据库(例如arangodb)很好地管理随机数据集,通过他们的JSON HTTP REST API存储任何类型的数据结构,只要它是有效的JSON。但是,Google数据存储转到客户端库并且数据存储区不能使用JSON,并且还会施加规则,例如没有silce []类型,没有地图映射[类型]类型失败,例如datastore: invalid Value type
e.t.c
我探索了实现PropertyLoadSaver接口加载/保存功能的选项,并修改了创建PropertyList和Property来创建[]属性。集合下面的案例是type Collection map[string]interface{}
,其中包含一种数据集
func (m Collection) Save() ([]datastore.Property, error) {
data := []datastore.Property{}
for key, value := range m {
if util.IsSlice(value) {
props := datastore.PropertyList{}
for _, item := range value.([]string) {
props = append(props, datastore.Property{Name: key, Value: item})
}
data = append(data, datastore.Property{Name: key, Value: props})
} else {
data = append(data, datastore.Property{Name: key, Value: value, NoIndex: true})
}
}
json.NewEncoder(os.Stdout).Encode(data)
return data, nil
}
是的,我们可以创建一个可以根据地图数据填充的结构,并将其保存到数据存储区。然而,我们想知道是否有更简单的方法来接收地图并将其保存到数据存储区而不会增加复杂性。
替代
type Person struct{
Name string
Surname string
Addresses []Address
...
}
type Address struct{
Type string
Detail string
}
这个map[string]interface{}{Name:"Kwasi", Surname:"Gyasi-Agyei", Addresses:...}
可以编组到上面的结构中,由Datastore go client lib保存。
然而,我更感兴趣的是利用PropertList,[]属性,除非该路由不必要地复杂。基本上要问的是,哪种方法最适合提供与无模式数据库相同的灵活性。