使用 Schema Registry

Neo4j 是一个无模式数据库,当消息需要转换为 Avro、Protobuf 或 JSON Schema 等模式格式以通过 Kafka 传输时,这会带来挑战。由于图数据的灵活特性,可能会出现模式冲突。为了缓解冲突,建立结构化的模式强制和验证方法至关重要。

强制结构

当与 Neo4j 一起使用 Avro、Protobuf 或 JSON Schema 等模式格式时,建议在数据中强制执行结构。这包括

  • 导出属性的类型一致性:确保源连接器导出的属性在标签内的所有节点以及类型内的所有关系中具有相同的类型。

  • 类型和存在约束:利用 Neo4j Enterprise 和 AuraDB 中提供的类型和存在约束。有关更多详细信息,请参阅Cypher 手册

图结构演变

在演变图数据结构时,必须提前进行规划,并考虑 Schema Registry 兼容性模式。例如,在默认的兼容性模式(BACKWARD)中,添加新属性通常是安全的。但是,应谨慎处理删除或类型更改,因为它们可能会在模式版本之间引入冲突。

根据特定的需求和数据结构,可能需要更改兼容性模式,甚至更改为 NONE。但是,在实施之前,务必彻底测试兼容性更改。

处理非结构化图数据

在图数据难以构建或演变的情况下,建议探索是否可以放宽兼容性模式并在消费者端管理模式更改。如果不可行,建议采用无模式消息格式。但是,当使用无模式消息格式时,您将失去基于模式的类型转换支持。