首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我可以配置Gremlin GraphBinary将枚举序列化为字符串吗?

在使用 Apache TinkerPop 的 Gremlin 和 GraphBinary 序列化时,默认情况下,GraphBinary 序列化器并不直接支持将枚举类型序列化为字符串。然而,您可以通过自定义序列化器来实现这一点。

以下是一个示例,展示如何配置 Gremlin GraphBinary 将枚举序列化为字符串。

示例代码

假设您有一个枚举类型 Color,并希望将其序列化为字符串。

定义枚举类型

代码语言:javascript
复制
from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

自定义 GraphBinary 序列化器

您需要创建一个自定义的 GraphBinary 序列化器来处理枚举类型的序列化和反序列化。

代码语言:javascript
复制
from gremlin_python.structure.io.graphbinary import GraphBinaryWriter, GraphBinaryReader
from gremlin_python.structure.io.graphbinaryV1 import GraphBinaryType, GraphBinaryTypeSerializer
from gremlin_python.structure.io import graphbinaryV1
from gremlin_python.process.traversal import T
from gremlin_python.driver.client import Client

class EnumSerializer(GraphBinaryTypeSerializer):
    def __init__(self, enum_type):
        self.enum_type = enum_type
        super().__init__(GraphBinaryType.CUSTOM)

    def dictify(self, obj, writer):
        return obj.name

    def objectify(self, data, reader):
        return self.enum_type[data]

# 创建自定义的 GraphBinaryWriter 和 GraphBinaryReader
writer = GraphBinaryWriter()
reader = GraphBinaryReader()

# 注册自定义的 EnumSerializer
writer.register_serializer(Color, EnumSerializer(Color), True)
reader.register_serializer(Color, EnumSerializer(Color), True)

# 创建 Gremlin 客户端
client = Client('ws://localhost:8182/gremlin', 'g', message_serializer=graphbinaryV1.GraphBinaryMessageSerializer(reader, writer))

# 示例:将枚举值序列化为字符串并发送到 Gremlin 服务器
color = Color.RED
serialized_color = writer.writeObject(color)
print(f'Serialized Color: {serialized_color}')

# 示例:从 Gremlin 服务器接收数据并反序列化为枚举值
deserialized_color = reader.readObject(serialized_color)
print(f'Deserialized Color: {deserialized_color}')

解释

  1. 定义枚举类型
    • 定义一个枚举类型 Color,包含 REDGREENBLUE 三个值。
  2. 自定义 GraphBinary 序列化器
    • 创建一个 EnumSerializer 类,继承自 GraphBinaryTypeSerializer
    • dictify 方法中,将枚举值转换为其名称(字符串)。
    • objectify 方法中,将字符串转换回枚举值。
  3. 注册自定义序列化器
    • 创建 GraphBinaryWriterGraphBinaryReader 实例。
    • 使用 register_serializer 方法注册自定义的 EnumSerializer
  4. 创建 Gremlin 客户端
    • 创建一个 Gremlin 客户端,并使用自定义的 GraphBinaryMessageSerializer
  5. 序列化和反序列化示例
    • 将枚举值 Color.RED 序列化为字符串并打印。
    • 将序列化后的字符串反序列化为枚举值并打印。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JanusGraph重要笔记

) JanusGraph数据库配置(官网中文翻译).https://blog.csdn.net/wzwdcld/article/details/82082760 JanusGraph·server端配置启动和远程...即可在应用程序内使用嵌入式Janus写入数据和查询数据 https://mp.csdn.net/postedit/82024703 有人说把文中 127.0.01,改远程地址,即可远程写入数据和查询数据,还没有试验过...Graph的逻辑, 创建Schema和其他元素的逻辑由 JanusGraphApp完成 > 上面压缩包里的项目从 RemoteGraphApp出运行,可以直接跑通..., 服务器端可以查询到数据。...(字符串)逻辑 该字符串创建schema、创建具体元素的代码序列化到一句请求字符串中 所以需要写序列化请求内容的代码,此处有些繁琐 验证可用 JanusGraph数据库操作 JanusGraph

1.7K10

大数据图:循环点阵

0→1→3 0→2→3 如上图所示,可以通过单纯地从左上角到右下角走两次来手动枚举这些路径而不会有重复。但是当点阵变得太大而不能有效地作图并手动枚举时,就可以通过数学技术来确定路径的数量。...v[2], v[3]] ==>[v[0], v[1], v[3]] webwxgetmsgimg3.jpg 一个2x2点阵足够小,其路径也可以如上图展示的那样枚举。...它有6条不同的路径,这可以Gremlin中验证。...例如,尝试使用Gremlin的遍历方法来确定1000x1000点阵中的所有不同的路径,缺点很快就会暴露出来,Gremlin 需要和宇宙的年龄一样长的时间来实现。...相反,对于任何n都可以来计算它的组合数。20x20的有向点阵拥有超过1370亿个不同的路径!对于Gremlin来说,在合理的时间内枚举这些路径太勉强了。

3.5K60
  • 10. Things to Consider in a Multi-Node JanusGraph Cluster

    图的一致性 如果你使用ConfiguredGraphFactory配置所有的JanusGraph服务,JanusGraph确保所有图的表示在群集中的所有JanusGraph节点上都是最新的。...如果要更新单个图配置,则必须使用可用的更新API执行此操作。 然后,这些更新API导致跨群集中所有JanusGraph节点的graph缓存清除。 1.2....这允许你在JanusGraph集群中的每个节点上通过字符串绑定访问动态创建的图形及其遍历引用。...这将允许在远程图形引用的情况下在本地运行gremlin查询。 传统上,通过发送字符串脚本表示来运行对远程Gremlin服务的查询,这些表示在远程服务上处理并且响应被序列化并发回。...最后,我们可以在本地使用withRemote方法来访问对远程图的本地引用: gremlin> cluster = Cluster.open('conf/remote-objects.yaml') ==>

    1.5K20

    eLife | 利用进化信息预测蛋白质界面间残基-残基相互作用

    这样一对蛋白质的多序列比对称为配对对齐。 对于基因组中有单拷贝基因的基因家族,如核糖体蛋白,很容易构建配对对齐,因为来自同一基因组的序列可以直接连接。...然后对配对的比对进行过滤,以冗余度降低至90%序列同一性,并去除缺口大于75%的位置。...(5)用Gremlin评分排序残基对 为了W ij矩阵简化为反映位置i和j之间耦合强度的单个值,作者首先计算S ij,即它们的向量2范数。...(6)Gremlin评分转化成距离约束 作者耦合强度转换为特定于残基对的距离约束,并将其包括在Rosetta结构预测程序中。作者使用以下形式的距离约束: ?...图3 从接触预测到结构建模 预测的接触对于建模组建蛋白质复合物有帮助?作者在具有18种蛋白质复合物(复合物的部分结构已知)的对接测试集上进行评估。

    1.2K70

    Jackson行为特征SerializationFeature和DeserializationFeature【收藏】

    它们分别用于控制对象的序列化和反序列化过程中的各种特性和选项,通过在序列化和反序列化过程中配置这些特性,可以灵活控制 JSON 数据的解析和生成方式。...:允许空数组([])反序列化为 null 对象。...2、 ACCEPT_EMPTY_STRING_AS_NULL_OBJECT:允许字符串序列化为 null 对象。当遇到空字符串时,解析为 null。...9 、WRITE_ENUMS_USING_TO_STRING:对枚举类型进行序列化时,使用 toString() 方法获取枚举值的字符串形式。...20、 WRITE_CHAR_ARRAYS_AS_JSON_STRINGS:字符数组(char[])序列化为字符串形式。 建议收藏,以备不时之需! 术因分享而日新,每获新知,喜溢心扉。

    29210

    【翻译】图解Janusgraph系列-索引参数与全文索引查询(Janusgraph Index Parameters and Full Text Search)

    1 全文检索 索引字符串值(即具有String.class数据类型的属性键)时, 可以选择这些值索引为由mapping参数类型控制的文本或字符串。...要使此索引选项显式,可以属性键索引为文本时定义映射。...当字符串属性被索引为文本时,字符串值被标记化为一包令牌。 确切的标记化取决于索引后端及其配置。JanusGraph的默认标记化字符串拆分为非字母数字字符, 并删除少于2个字符的任何标记。...textFuzzy:如果字符串值类似于给定的查询字符串(基于Levenshtein编辑距离) import static org.apache.tinkerpop.gremlin.process.traversal.P...1.3 全文和字符串搜索 如果您使用Elasticsearch,则可以属性索引为文本和字符串,从而允许您使用所有谓词进行精确匹配和模糊匹配。

    85830

    7. JanusGraph服务

    本节介绍如何使用WebSocket配置,以及如何配置JanusGraph Server来处理HTTP端交互。 1. 入门 1.1....它应该使用合适的后端存储来配置,对于这个后端存储使用不同密钥空间,表或存储目录是合适的。此graph通过用户名和密码来使用。 6.1.1....它应该使用合适的后端存储来配置,对于这个后端存储使用不同密钥空间,表或存储目录是合适的。此graph通过用户名和密码来使用。...它应该使用合适的后端存储来配置,对于这个后端存储使用不同密钥空间,表或存储目录是合适的。此graph通过用户名和密码来使用。...添加到org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0,驱动程序知道如何正确反序列化JanusGraph返回的自定义数据类型

    2.3K50

    【翻译】Gremlin-Gremlin何许人也?

    Gremlin是一种函数式数据流语言,可以使得用户使用简洁的方式表述复杂的属性图(property graph)的遍历或查询。...这意味着不仅所有的TinkerPop启用的图形系统都能执行Gremlin遍历,而且每个Gremlin遍历都可以被评估为实时数据库查询或批处理查询。...四:命令式和声明式遍历 Gremlin遍历可以以命令式(程序式)方式,声明性(描述性)方式编写,也可以包含命令性和声明性的混合方式编写。...Gremlin统一了这种鸿沟,遍历可以用任何支持函数组合和嵌套的编程语言编写(每种主要的编程语言都支持)。...遍历针对嵌入式图形数据库进行本地评估,通过网络将自身序列化为远程图形数据库,或将自身发送到OLAP处理器以进行集群范围的分布式执行。

    2.5K30

    JSON.stringify()与JSON.parse()

    4.对象中不可枚举的值将不会对齐序列化 5.NaN 和 Infinity 及 null 都会被当做 null。...6.日期对象将会对其序列化为字符串string7.循环引用的对象将会抛出错误8.undefined、任意的函数、symbol 值,在序列化过程中会被忽略【出现在非数组对象的属性值中时】或者被转换成 null...比如,一个单一的字符串或者数字或者一个空数组可以是合法的 JSON 对象。这一点(第3点)很多人认为与第2点互相矛盾。第二点不是说的是键值对key和value?...('newObj', newObj ) // 输出的是 []我们先使用JSON.stringify([])将它转化为JSON字符串可以了JSON.parse() 不允许用逗号作为结尾JSON.parse...3.JSON 可以任何标准合法的 JSON 数据格式化保存。

    12210

    图数据库HugeGraph:HugeGraph-Hubble基于Web的可视化图管理初体验

    相关的具体介绍,可以跳转至HugeGraph-Hubble官网详情—— 很遗憾是,官网上并没有很详细地介绍如何搭建HugeGraph-Hubble集成到HugeGraph-Server中,是根据之前的...很遗憾,这边直接通过zookeeper客户端去看,出现了乱码,但其他地方的中文又是正常的,因此,怀疑,该节点数据估计是做了序列化,导致无法看到正常数据.........四、hugegraph与hugegraph-hubble启动服务 配置完后,就可以启动hugeGraph了——(这里需要注意,首次启动,需要进行初始化,初始化指令为bin/init-store.sh,执行完后...=100 //边默认查询数量 gremlin.edges_total_limit=500 gremlin.batch_query_ids=100 配置完成后,启动hugegraph-hubble——...平台的模块使用流程如下: image.png 创建图的方式很简单,直接点击创建图,弹出框上填入相关服务器配置信息即可,可参考已经配置好的—— image.png 这里主机名和端口号的参数需根据hugegraph.properties

    2.9K40

    enum in Go

    模拟枚举的方式在很多场景下都是有效的,但也有一些弊端需要注意:不支持字符串: 使用iota的方式只能创建整数常量,不能直接用于创建字符串常量。...如果你需要使用字符串作为枚举值,就无法使用这种方式。全局命名空间: 所有的常量都在全局命名空间中,可能存在命名冲突的风险。虽然可以使用包名来作为前缀,但并没有像枚举那样的局部命名空间。...然后,我们定义了一个包含Status枚举类型和一个字符串的消息类型Response。接下来,你可以使用protoc工具来生成 Go 语言代码。...= nil {fmt.Println("Error:", err)return}// 字节流反序列化为对象newResponse := &example.Response{}err = proto.Unmarshal...然后,我们将该对象序列化为字节流,并再次反序列化为新的Response对象。最后,我们使用switch语句检查枚举值。

    16510

    Fastjson 使用

    fastjson 是阿里巴巴的开源 JSON 解析库,它可以解析 JSON 格式的字符串,支持 Java Bean序列化为JSON字符串,也可以从 JSON 字符串序列化到 JavaBean。...功能完备: 支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展。...配置类 JSONField 类的说明 package com.alibaba.fastjson.annotation; public @interface JSONField { // 配置序列化和反序列化的顺序...// 配置date序列化和反序列使用yyyyMMdd日期格式 @JSONField(format="yyyy-MM-dd") public Date date; 默认情况下, FastJson 库可以序列化...很多人也喜欢给枚举定义一个私有的属性,序列化为JSON时,希望以这个属性值作为value,这个时候就需要自己定义JSON的序列化和反序列化实现了。

    1.9K20

    JSON类库Jackson优雅序列化Java枚举

    但是在这些枚举的意思正确而全面的返回给前端却并不是那么顺利,我们通常会使用Jackson类库序列化对象为JSON,今天就来讲一个关于使用Jackson序列枚举的通用性技巧。 2....序列枚举 如果我们直接使用Jackson对枚举进行序列化,只能简单的输出枚举的String名称: @Resource private ObjectMapper objectMapper...序列化为 {"code":1,"description":"男"} 。...Spring Boot 中自动全局配置 在Spring Boot应用中我们希望能全局配置。...总结 这里我们介绍了如何定制Jackson库以达到对枚举进行更加友好的序列化的目的。其实不单单枚举,你也可以实现其它序列化,反序列化,时间输出格式的定制。这些特性留给你自己挖掘。

    5.1K20

    图解图库JanusGraph系列-解惑图数据库,你知道什么是图数据库

    你知道什么是图数据库?...我们知道一个图包含节点和边,如下图: 在图数据库中图实体表现为节点,实体与其他实体连接的方式表现为联系(边)。...应用程序中的客户代码(相对JanusGraph来说是客户)直接调用Gremlin去查询JanusGraph中存储的图,这种情况下外部存储系统可以是本地的,也可以处在远程 第二种方式:应用程序和Janus...在配置中,可以指定JanusGraph要用的组件,可以控制JanusGraph运行的各个方面,还可以指定一些JanusGraph集群的调优选项: 最小的JanusGraph配置只需要指定一下JanusGraph...以上提到的后端存储系统、索引后端、缓存、调优选项等都可以在JanusGraph的配置文件中进行指定。默认情况下它的配置文件存放在JanusGraph_home/conf目录下。

    2.5K40
    领券