这些天我读了很多关于我的Apache Avro
书,我更倾向于使用它而不是使用JSON
. 目前,我们正在做的是,我们正在JSON
使用序列化文档Jackson
,然后将该序列化JSON
文档写入Cassandra
每个row key/user id
. 然后我们有一个 REST 服务,它使用行键读取整个JSON
文档,然后反序列化并进一步使用它。
我们将像这样写入 Cassandra——
user-id column-name serialize-json-document-value
下面是一个示例,它显示了我们正在写入 Cassandra 的 JSON 文档。此 JSON 文档适用于特定的行键/用户 ID。
{
"lv" : [ {
"v" : {
"site-id" : 0,
"categories" : {
"321" : {
"price_score" : "0.2",
"confidence_score" : "0.5"
},
"123" : {
"price_score" : "0.4",
"confidence_score" : "0.2"
}
},
"price-score" : 0.5,
"confidence-score" : 0.2
}
} ],
"lmd" : 1379214255197
}
现在我们正在考虑使用 Apache Avro,以便我们可以通过使用 Apache Avro 序列化来压缩这个 JSON 文档,然后将它存储在 Cassandra 中。我对此有几个问题-
- 是否可以首先使用 Apache Avro 序列化上述 JSON 文档,然后将其写入 Cassandra?如果是,我该怎么做?谁能提供一个简单的例子?
- 我们还需要反序列化它,同时从我们的 REST 服务中读取 Cassandra。这也可以吗?
下面是我的简单代码,它序列化 JSON 文档并在控制台上打印出来。
public static void main(String[] args) {
final long lmd = System.currentTimeMillis();
Map<String, Object> props = new HashMap<String, Object>();
props.put("site-id", 0);
props.put("price-score", 0.5);
props.put("confidence-score", 0.2);
Map<String, Category> categories = new HashMap<String, Category>();
categories.put("123", new Category("0.4", "0.2"));
categories.put("321", new Category("0.2", "0.5"));
props.put("categories", categories);
AttributeValue av = new AttributeValue();
av.setProperties(props);
Attribute attr = new Attribute();
attr.instantiateNewListValue();
attr.getListValue().add(av);
attr.setLastModifiedDate(lmd);
// serialize it
try {
String jsonStr = JsonMapperFactory.get().writeValueAsString(attr);
// then write into Cassandra
System.out.println(jsonStr);
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Serialzie JSON 文档看起来像这样 -
{"lv":[{"v":{"site-id":0,"categories":{"321":{"price_score":"0.2","confidence_score":"0.5"},"123":{"price_score":"0.4","confidence_score":"0.2"}},"price-score":0.5,"confidence-score":0.2}}],"lmd":1379214255197}
AttributeValue
和Attribute
班级正在使用Jackson Annotations
.
还有一个重要的注意事项,上述 json 文档中的属性将根据列名而改变。对于不同的列名,我们有不同的属性。有些列名将有两个属性,有些将有 5 个属性。因此,根据我们拥有的元数据,上述 JSON 文档将具有正确的属性和值。
我希望这个问题足够清楚。谁能为此提供一个简单的示例,我如何使用 Apache Avro 实现这一点。我刚开始使用 Apache Avro,所以我遇到了很多问题..