在CosmosDB中存储顶点为JSON

问题描述:

所有使用gremlin API查看CosmosDB图形的示例都使用具有一个属性级别的顶点。但是如果我们想将顶点表示为JSON文档呢?在CosmosDB中存储顶点为JSON

user.name = "Mike" 
user.location.lat = "37.7749" 
user.location.lng = "122.4194" 

有时嵌套的属性应该被拆分为单独的顶点并通过边连接,但通常这是不必要的。

这是什么推荐的方法?是否应该只有一个适配器类,在顶点进入和离开数据块时将顶点展平/解开?这看起来很简单,但在性能方面却非常昂贵。

有一种方法可以使用Gremlin API和Cosmos DB支持编写嵌套属性。但是,这种模式要求不会按照您所描述的方式映射到JSON文档格式。

Gremlin顶点属性可以具有每个键的多个值以及每个值的meta-properties(又名嵌套属性)。

我建议你阅读Tinkerpop reference on Vertex Properties

这里是如何可以嵌套属性的顶点属性通过精怪加:

g.V('vertex_id').property('name', 'marko') // (1) 
g.V('vertex_id').properties('name').hasValue('marko').property('metaprop', 'value') // (2) 

(1) - 增加一个顶点属性(“名称”,“马尔科) (2) - 对(“名”,“马尔科)财产

这里添加一个嵌套的属性是将存储在CosmosDB与顶点属性架构的JSON文件的一个例子:

{ 
    id: <ID>, 
    label: 'person', 
    name: [{ 
    id: <ID>, 
    _value: 'marko', 
    _meta : { 
     metaprop: 'value' 
    } 
    }], 
    address: [ 
    { 
     id: <ID>, 
     _value: 'street 1', 
     _meta: { 
     type: 'street', 
     somethingElse: 'value' 
     } 
    }, 
    { 
     id: <ID>, 
     _value: 'new york', 
     _meta: { 
     type: 'city', 
     anotherMeta: 'something' 
     } 
    } 
    ] 
} 
+0

谢谢,我不知道顶点属性。这对我的用例来说似乎不够,因为我仍然需要编写一个适配器来在原始JSON和此结构之间进行转换。另外我不知道我是否可以在嵌套属性上创建索引,这是我需要的。 – mikestaub

+2

澄清:如果您的目标是将原始JSON摄入CosmosDB图顶点,那么您是正确的,并且当前的支持需要您将数据模型调整为Gremlin顶点结构。你有可以分享的JSON文档的示例/样本吗? 我们的目标是支持一种格式,它可以使Gremlin的写/读JSON更简单/更流畅,避免特定的模式需求。这项工作正在进行中,我们将在未来提供更多细节。 –

+0

嗨Olivier,我无法提供示例数据,但我会看看ArangoDB提供的图形API。它非常简单,让我们通过任何有效的JSON来创建一个新的顶点:https://docs.arangodb.com/3.2/HTTP/Gharial/Vertices.html – mikestaub