我希望写一个分布式应用程序,将需要一个时间序列在内存中的数据库(这也需要是持久的)。我需要在这个时间序列数据上做各种分析,比如聚合,过滤等,理想情况下我想要单独扩展这些数据。
意思是,假设有一个进程附加到这些时间序列数据上,然后将这些数据公开给一组应用程序(用于各种分析的进程),比如共享内存句柄。为了计算分析,应用程序将需要主要以只读方式遍历时间序列。因此,once可以将其视为一个将要编写的过程(添加/修改时间序列)。以及将以只读方式访问这些时间序列数据以评估分析的其他应用程序。
此外,我需要时间序列数据被永久发送,最好是持久性和分布式缓存,如果可能的话(一些基于redis的东西可能)。
我想探索一下我有什么替代方案。
发布于 2014-03-19 06:50:30
对于您的用例来说,Redis似乎是一个很好的选择。你可以在只有一个主机而没有从机的情况下开始。如果您使用非事务性服务器,redis- pipelining将处理并发,因此客户端可以在两者之间读取。
对时间序列数据使用ZADD和ZRANGEBYSCORE。您可能还想看一看here。
当您稍后添加几个从设备时,您可以将这些设备保留为只读模式,并让只读客户端从这些从设备收集数据。您甚至可以在服务器上的Lua中执行一些预聚合。真正的数据分析应该在客户端进程中完成。
如果数据很多,您可能希望将其序列化为msgpack格式。服务器端的Lua脚本可以序列化/反序列化它。这种格式的内存效率非常高。
希望这能帮上忙,TW
发布于 2019-05-28 14:35:03
时间序列数据的处理似乎适合于Druid引擎。Druid为时间序列数据提供对OLAP数据引擎的快速响应。此外,metatron Discovery,一个基于Druid的分析平台。看看这个!
https://stackoverflow.com/questions/22486205
复制相似问题