5 java json cassandra jackson avro
Apache Avro这些天我一直在阅读很多内容,我更倾向于使用它而不是使用它JSON.目前,我们正在做的是,我们正在使用序列化JSON文档Jackson,然后为每个JSON文档编写序列化文档.然后我们有一个REST服务,它使用行键读取整个文档,然后反序列化并进一步使用它.Cassandrarow key/user idJSON
我们会像这样写入Cassandra-
user-id column-name serialize-json-document-value
Run Code Online (Sandbox Code Playgroud)
下面是一个示例,显示了我们写入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
}
Run Code Online (Sandbox Code Playgroud)
现在我们正在考虑使用Apache Avro,以便我们可以通过使用Apache Avro进行序列化来压缩此JSON文档,然后将其存储在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();
}
}
Run Code Online (Sandbox Code Playgroud)
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}
Run Code Online (Sandbox Code Playgroud)
AttributeValue和Attribute班级正在使用Jackson Annotations.
还有一个重要的注意事项,上面的json文档中的属性将根据列名称进行更改.我们为不同的列名称提供了不同的属性.某些列名称将具有两个属性,一些将具有5个属性.因此,根据我们所拥有的元数据,上述JSON文档将具有其正确的属性及其值.
我希望这个问题足够清楚.任何人都可以为此提供一个简单的示例如何使用Apache Avro实现这一目标.我刚开始使用Apache Avro,所以我遇到了很多问题.
Avro 需要一个模式,因此您必须在使用它之前设计它;并且用法与自由格式的 JSON 有很大不同。
但您可能需要考虑Smile ,而不是 Avro ,这是一种一对一的 JSON 二进制序列化,专为您可能想要在 JSON 和二进制数据之间来回切换的用例而设计;例如,使用 JSON 进行调试或为 Javascript 客户端提供服务。
Jackson 有 Smile 后端(请参阅https://github.com/FasterXML/jackson-dataformat-smile),实际上只需一行更改即可使用 Smile 代替(或补充)JSON。很多项目都使用它(例如Elastic Search),并且它是成熟稳定的格式;Jackson 提供的工具支持广泛适用于不同的数据类型。
| 归档时间: |
|
| 查看次数: |
8020 次 |
| 最近记录: |