我希望有经验的Apache Ignite可以帮助指导我的团队找到关于Apache Ignite新设置的答案 .
整体设置
数据从许多分布式传感器不断生成,并流入我们的数据库 . 每个传感器可以每秒传递许多更新,但通常会产生<10次更新/秒 .
每日数据的大小约为 . 每个站点有5000万条记录 .
数据描述
每条记录包含以下值
-
传感器ID
-
点ID
-
时间戳
-
接近
其中1是传感器的ID,2是站点上某点的ID,3是从传感器到点的接近度测量 . 每秒都有约 . 1000个这样的新记录 . 记录永远不会更新 .
查询工作量
查询相当复杂,具有重要(和动态)回溯的时间 . 查询可能需要来自一个站点中的多个传感器的数据,但是动态确定所需的传感器 . 大多数连续查询仅需要过去几个小时的数据,但经常需要查询多天 .
通常,我们因此具有一次写入查询 - 许多场景 .
初步战略
如果我们将数据加载到例如java中的原始整数数组中,则一周的空间消耗接近5GB . 因为在今天的平台中它是“花生”,我们打算将所有数据加载到Ignite集群/分布式缓存中的所有节点上 . 换句话说,使用复制的缓存 .
然而,持续的更新让我感到困惑 . 如果我更新整个缓存,我需要每秒钟通过网络传输相当大量的数据 .
例如,每分钟/小时创建块不一定能够正常工作(因为每个传感器可以暂时脱机),这将使其在稍后的某个时间点传送过时的数据 .
因此,我的问题是如何有效地处理这一更新流,同时保持过去7-10天的数据的一致视图 .
我当前的本地实现将数据分成1小时块 . 当给定块的新记录到达时,块被替换为更新的块 . 这在单台机器上运行良好,但在集群中的网络开销方面可能过于昂贵 . 我还没有Ignite实现,所以我无法对此进行测试 .
理想情况下,点火集群中的每个节点将在过去X天内维护其自己的所有数据副本,并持续应用小更新工作负载 .
所以我的问题是,Igniters会如何处理这个问题?
1 回答
听起来你想要跨多个服务器扩展负载,但是复制缓存是不可能的,因为每次更新都将始终更新所有节点,并且您拥有的网络流量越多,节点越多 . 我认为您应该使用分区缓存,并尝试添加节点,直到系统能够处理负载 .