我编写了一个应用程序,它读取串行数据,执行一些操作,然后将其写入 csv 文件。我使用管理程序为每个串行线路运行一个单独的应用程序实例。来自不同串行流的一些数据需要组合和/或转换以创建新的自定义数据类型,然后将其写入 csv 文件或通过 UDP 广播。
我并不真正关心旧数据,只关心最近收到的数据。事实上,如果数据在一段时间后超时,这样当新数据停止传入时旧数据就不会被使用,那就太好了。
大约有 40 个或更多数据流传入,其中一些为 1Hz,另一些为 30Hz 或更高。
上位机是Linux系统。
进程间共享数据有哪些方法?
Redis 之类的东西可以解决这个问题吗? sqlite 数据库怎么样?有哪些权衡?
看起来可能的设计是一个简单的发布/订阅系统,例如NATS。你不需要持久性,所以简单的 NATS 很好。另一种可能性是 MQTT。
考虑到消费者需要逻辑来应对不同流的不同速率,无论使用何种技术。
SQLite 虽然是一个非常好的产品,但似乎并不适合这个应用程序, 因为它支持多个读取器,但一次仅支持一个写入器(请参阅WAL)。
您仍然可以考虑使用 SQLite 作为数据格式而不是 CSV。它不是 明确这些 CSV 文件是否是长期存在的。也是可以的 向 SQLite 导入/导出 CSV 文件。
我无法评论Redis,因为Redis有很多东西而你没有具体说明 你指的是什么(K/V 存储?队列?)。