【问题标题】:Storing a List in a Vertex using Gremlin and Azure Cosmos Graph使用 Gremlin 和 Azure Cosmos Graph 在顶点中存储列表
【发布时间】:2018-03-22 14:08:21
【问题描述】:

我正在尝试在 Vertex 本身中存储对 Vertex 所做的更改列表。理想情况下,我想要这样的东西:

{
    "id": "95fcfa87-1c03-436d-b3ca-340cea926ee9",
    "label": "person",
    "type": "vertex",
    "log": [{
            "user": "user@user.dk",
            "action": "update",
            "timestamp": "22-03-2017",
            "field": "firstName",
            "oldValue": "Marco"
        }
    ]
}

使用这个方法链我可以实现以下结构

graph.addV('person')
     .property('firstName', 'Thomas')
     .property(list, 'log', '22-03-2017')
     .properties('log')
     .hasValue('22-03-2017', '21-03-2017')
     .property('user','user@user.dk')
     .property('action', 'update')
     .property('field', 'firstName')
     .property('oldValue', 'Marco')
{
    "id": "95fcfa87-1c03-436d-b3ca-340cea926ee9",
    "label": "person",
    "type": "vertex",
    "properties": {
        "firstName": [{
                "id": "f23482a9-48bc-44e0-b783-3b74a2439a11",
                "value": "Thomas"
            }
        ],
        "log": [{
                "id": "5cfa35e1-e453-42e2-99b1-eb64cd853f22",
                "value": "22-03-2017",
                "properties": {
                    "user": "user@user.dk",
                    "action": "update",
                    "field": "firstName",
                    "oldValue": "Marco"
                }
            }
        ]
    }
}

但这似乎过于复杂,因为我必须存储一个值并向其添加属性。
是否可以使用上述数据添加匿名对象(即没有idvalue)?

【问题讨论】:

  • 将 Gremlin 顶点属性与列表和元属性一起使用是拥有更复杂实体的唯一方法,这些实体也可在顶点上查询。要记住的一件事是 Vertex 大小限制为 2MB(存储在 CosmosDB 中的 Vertex 的实际大小将与 Vertex 响应的大小不同),因此如果预计日志数据会在没有定期清理的情况下增长,您可能想要考虑不同的数据模型(也许日志数据块存储在单独的顶点中)
  • @OliverTowers 谢谢你,好点。在大小有限的结构中拥有实际上是一个无限列表听起来是个坏主意。如果你用这个创建一个答案,我可以接受。

标签: neo4j azure-cosmosdb graph-databases gremlin tinkerpop


【解决方案1】:

不是在历史日志中存储适当对象的实际解决方案,但如果您只是将其用作日志并且不必通过其属性访问或查询它,您可以将序列化的 JSON 放入值中吗?

类似这样的内容应该近似于您请求的结构:

dynamic entry = new JObject();
entry.user = "user@user.dk";
entry.action = "update";
entry.timestamp = "22-03-2017 12:34:56";
entry.field = "firstName";
entry.oldValue = "Marco";

graph.addV('person')
     .property('firstName', 'Thomas')
     .property(list, 'log', entry.ToString());
{
    "id": "95fcfa87-1c03-436d-b3ca-340cea926ee9",
    "label": "person",
    "type": "vertex",
    "properties": {
        "firstName": [{
                "id": "f23482a9-48bc-44e0-b783-3b74a2439a11",
                "value": "Thomas"
            }
        ],
        "log": [{
                "id": "5cfa35e1-e453-42e2-99b1-eb64cd853f22",
                "value": "{\"user\":\"user@user.dk\",\"action\":\"update\",\"timestamp\":\"22-03-2017\",\"field\":\"firstName\",\"oldValue\":\"Marco\"}"
            }
        ]
    }
}

这些日志条目可以轻松读取、反序列化、使用和呈现,但对可查询性没有太大作用。

【讨论】:

  • 一个有趣的想法,但是我们需要能够查询这个。
猜你喜欢
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多