json - 提高聚合跨多个 JSON 行的键值的性能

标签 json scala elasticsearch redis cassandra

我目前正在将以下格式 (JSON) 的数据存储在 Redis ZSET 中。分数是以毫秒为单位的时间戳。

 <timestamp_1> -   [ { "key1" : 200 }, { "key2": 100 }, {"key3" : 5 }, .... {"key_n" : 1} ]
 <timestamp_2> -   [ { "key50" : 500 }, { "key2": 300 }, {"key3" : 290 },  ....{"key_m" : 26} ]
 ....
 ....
 <timestamp_k> -   [ { "key1" : 100 }, { "key2": 200 }, {"key3" : 50 },  ....{"key_p" : 150} ]

我想提取给定时间范围内某个键的值。

例如,上面示例中的 key2 的值​​将在整个时间范围内。

[timestamp_1:100, timestamp_2:300, ..... timestamp_k:200] 

我可以获得当前输出,但我必须为每一行解析 JSON,然后遍历它以获取每一行中给定键的值。随着每行大小的增加(n、m 和 p 可以大到 10000),解析成为瓶颈。

我正在寻找有关是否有提高 Redis 性能的方法的建议?是否有任何特定的解析器(在 Scala 中)可以在这里提供帮助。

如果 Cassandra 和 Elasticsearch 等性能更好,我也愿意使用其他存储。除了 JSON 之外,我还接受其他格式来将数据存储在 Redis ZSet 中。

最佳答案

Cassandra 可以很好地满足您的要求。

你可以保留key_id作为分区键和 timestamp作为行键。

在 cassandra 中设计列族之前,您总是先定义查询。 提取给定时间范围内键的值。

如果您使用的是 CQL3,

创建模式:

CREATE TABLE imp_keys (key_id text, score int, timestamp timeuuid,PRIMARY KEY(key_id,timestamp));

访问数据:

SELECT score FROM imp_keys WHERE key_id=key2 AND timestamp > maxTimeuuid(start_date) AND timestamp < maxTimeuuid(end_date);

关于json - 提高聚合跨多个 JSON 行的键值的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25439129/

相关文章:

json - 数组的大小 excel - json vba 解析器

scala - Map Scala中的不同类型

angular - angular2中的动态路由

scala - Scala升降机: Box openOr does not seem to work

scala - 为什么Web开发框架倾向于围绕语言的静态功能工作?

c# - 线程锁内的多线程

ElasticSearch-如何组合不同查询的结果来提高平均精度

javascript - 后端准备json数据,前端通过ajax填充数据,有什么问题吗?

java - Android/Java 解析匿名 JSONArray 对象

javascript - 将 MySQL 数据从 Flask 传递到 JavaScript 以用于 Google Charts