2017-05-16 3 views
3

gremlin API를 사용하여 CosmosDB 그래프를 쿼리하는 모든 예제에서 한 수준의 속성을 가진 정점을 사용합니다. 그러나 정점을 JSON 문서로 나타내려면 어떨까요?CosmosDB에 JSON으로 정점을 저장

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

때로는 중첩 된 속성은 별도의 정점으로 밖으로 분할 가장자리를 통해 연결,하지만 종종이 불필요합니다.

권장되는 접근 방법은 무엇입니까? 꼭지점이 DB에 들어가고 나갈 때 꼭지점을 평평하게하거나 평평하게하는 어댑터 클래스가 있어야합니까? 이것은 간단하지만 성능 측면에서 비용이 많이 드는 것처럼 보입니다.

답변

2

Gremlin API를 사용하여 중첩 된 속성을 작성하고 Cosmos DB를 지원하는 방법이 있습니다. 그러나 이것에 대한 스키마 요구 사항은 설명 된 방식으로 JSON 문서 형식에 매핑되지 않습니다.

Gremlin 정점 특성은 키 당 여러 값과 값 당 메타 속성 (중첩 된 속성)을 가질 수 있습니다. '정점 속성 ('이름을 '추가 -

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

(1) :

내가 여기 Tinkerpop reference on Vertex Properties

읽고 권하고 싶습니다 당신이 놈아 통해 정점 속성에 중첩 된 속성을 추가 할 수있는 방법입니다 마르코는) (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