如何将 Apache Ignite 缓存条目写入 Apache Avro 文件?
How can I write Apache Ignite cache entry to Apache Avro file?
我现在正在执行一项任务,需要将 Apache Ignite 缓存存储的数据写入 Avro。
不幸的是,我无法访问用于创建缓存存储对象的初始 Java 类。
我拥有的唯一来源是 Apache Ignite(它是 Java API)。缓存本身显示为 IgniteCache<Object, Object>
。实际上,每个缓存条目都是一个键值对,其中键实现为 AffinityKey,值包含与项目相关的对象。
将缓存条目转换为 JSON 时如下所示:
{
"AffinityKey [key=1, affKey=1f1a11b-ba1e-1cd1-1c11-c11111ab1111]": {
"version": null,
"name": "Name 1",
"description": "Description 1",
"interests": [
"int1",
"int2",
"int3",
"int4"
],
"hobbies": [
"hobby1",
"hobby2",
"hobby3"
],
"classId": 11111,
"creator": "5b90fb41e0eb212c4736d186",
"editorId": null,
"logoConfigurationId": 85,
"editTimeout": null,
"active": false,
"lastActionTime": {
"year": 2020,
"month": "MAY",
"nano": 143000000,
"monthValue": 5,
"dayOfMonth": 18,
"hour": 14,
"minute": 1,
"second": 4,
"dayOfYear": 139,
"dayOfWeek": "MONDAY",
"chronology": {
"id": "ISO",
"calendarType": "iso8601"
}
},
"status": "Attention required",
"lastJobId": null
}
}
有人可以告诉我如何将我的 Ignite 缓存条目序列化到 Avro 吗?
据我所知,avro 序列化需要 Avro 模式。为此,我需要知道缓存条目中捕获的每个字段的名称和类型。我看到的模式创建的唯一方法是获取表示为 BinaryObject 的条目键和条目值,然后收集所有字段名称和类型。拥有对象字段的所有名称类型对,可以手动构造某种 json 以进一步将其存储在 .asvc 文件中。
也许有人可以就更多 'elegant' 解决方案提出建议?
将 Ignite 缓存条目表示为 Map<BinaryObject, BinaryObject>
(从 Ignite 请求缓存时应使用 .withKeepBinary()
),可以提取每个 BinaryObject 字段的定义(字段名称 + 字段类型) ). Avro SchemaBuilder 可以进一步用于 avro 模式生成。
我现在正在执行一项任务,需要将 Apache Ignite 缓存存储的数据写入 Avro。
不幸的是,我无法访问用于创建缓存存储对象的初始 Java 类。
我拥有的唯一来源是 Apache Ignite(它是 Java API)。缓存本身显示为 IgniteCache<Object, Object>
。实际上,每个缓存条目都是一个键值对,其中键实现为 AffinityKey,值包含与项目相关的对象。
将缓存条目转换为 JSON 时如下所示:
{
"AffinityKey [key=1, affKey=1f1a11b-ba1e-1cd1-1c11-c11111ab1111]": {
"version": null,
"name": "Name 1",
"description": "Description 1",
"interests": [
"int1",
"int2",
"int3",
"int4"
],
"hobbies": [
"hobby1",
"hobby2",
"hobby3"
],
"classId": 11111,
"creator": "5b90fb41e0eb212c4736d186",
"editorId": null,
"logoConfigurationId": 85,
"editTimeout": null,
"active": false,
"lastActionTime": {
"year": 2020,
"month": "MAY",
"nano": 143000000,
"monthValue": 5,
"dayOfMonth": 18,
"hour": 14,
"minute": 1,
"second": 4,
"dayOfYear": 139,
"dayOfWeek": "MONDAY",
"chronology": {
"id": "ISO",
"calendarType": "iso8601"
}
},
"status": "Attention required",
"lastJobId": null
}
}
有人可以告诉我如何将我的 Ignite 缓存条目序列化到 Avro 吗? 据我所知,avro 序列化需要 Avro 模式。为此,我需要知道缓存条目中捕获的每个字段的名称和类型。我看到的模式创建的唯一方法是获取表示为 BinaryObject 的条目键和条目值,然后收集所有字段名称和类型。拥有对象字段的所有名称类型对,可以手动构造某种 json 以进一步将其存储在 .asvc 文件中。
也许有人可以就更多 'elegant' 解决方案提出建议?
将 Ignite 缓存条目表示为 Map<BinaryObject, BinaryObject>
(从 Ignite 请求缓存时应使用 .withKeepBinary()
),可以提取每个 BinaryObject 字段的定义(字段名称 + 字段类型) ). Avro SchemaBuilder 可以进一步用于 avro 模式生成。