问题描述
最近,我已经将Janusgraph升级到版本0.5.2,它支持序列化程序版本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”])。一切都是字符串数组。
谢谢。
解决方法
对于GraphSON和GraphBinary,我们选择将数组视为List
。您将必须将自己的自定义序列化插件插入GraphSON。通过稍微看一下JanusGraph代码,您可以了解开发一个代码所涉及的内容。您需要自定义serializer/deserializer实例和一个Module才能将它们公开给GraphSON。然后,您可以使用addCustomModule()
来构建GraphSONMapper
。您将该映射器构建器实例交给新的GraphSONMessageSerializer
。
对于服务器来说,这意味着添加您自己的IoRegistry
(JanusGraph示例[here])4,并将其添加到Gremlin Server configuration file。
对于需要手动构造GraphSONMessageSerializer
的驱动程序,然后在使用Cluster
选项提供Builder
来构建带有serializer(MessageSerializer)
的{{1}}对象时。
您可以使用Gryo作为替代方法,我相信它将保留数组类型,但是请注意:
- Gryo已过时。没有计划完全删除它,但是二进制格式的首选是GraphBinary(尽管如我前面提到的那样,它不支持数组。
- Gryo仅适用于JVM。不支持Python,.NET等。