【问题标题】:How to modify Janusgraph(Gremlin) server API response, array of strings如何修改 Janusgraph(Gremlin) 服务器 API 响应、字符串数组
【发布时间】:2020-10-13 05:38:41
【问题描述】:

最近,我将 Janusgraph 升级到版本 0.5.2,它支持 Serializer 版本 GryoMessageSerializerV3d0、..V2、..V1(向后兼容)。在 version3 响应中 对于数据类型字符串和字符串数组,响应格式相同。我希望将响应分开。

当前响应格式(v3):

"@type": "g:Map",
"@value": [
    "_id", // string
    {
        "@type": "g:List",
        "@value": [
            "id1"
        ]
    },
    "names", // array of strings
    {
        "@type": "g:List",
        "@value": [
            "Name1", "Name2"
        ]
    },
    
]

对于这两种数据类型,响应格式为 {"@type": "g:List",}。我的要求是如何区分数据类型是否为数组/字符串。我无法检查循环中的每个键,考虑到有大量数组数据类型,这不是正确的解决方案。有什么可以在序列化级别配置的。任何其他分离响应的解决方案(数组作为数组,字符串作为字符串)。

注意: 即使对于其他序列化版本(v2,v1)也没有区别,但响应风格不同([“id1”],[“Name1”,“Name2”])。一切都是字符串数组。

谢谢。

【问题讨论】:

    标签: arrays serialization janusgraph gremlin-server


    【解决方案1】:

    对于 GraphSON 和 GraphBinary,我们选择将数组视为 List。您必须为 GraphSON 编写自己的自定义序列化程序插件。您可以通过查看 JanusGraph 代码来了解开发其中涉及的内容。您需要自定义 serializer/deserializer 实例和 Module 将它们公开给 GraphSON。然后,您可以使用addCustomModule() 构造GraphSONMapper。您将该映射器构建器实例交给一个新的GraphSONMessageSerializer

    对于服务器,这意味着添加您自己的 IoRegistry(JanusGraph 示例 [此处])4 并将其添加到 Gremlin 服务器 configuration file

    对于意味着手动构造GraphSONMessageSerializer 的驱动程序,然后在使用Builder 构造Cluster 对象时使用serializer(MessageSerializer) 选项提供您的实例。

    作为替代方案,您可以使用 Gryo,我相信它会保留数组类型,但请注意:

    1. Gryo 已弃用。没有计划完全删除它,但首选二进制格式是 GraphBinary(尽管它不支持我前面提到的数组。
    2. Gryo 仅适用于 JVM。不支持 Python、.NET 等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      相关资源
      最近更新 更多