首页 > 解决方案 > 基于 gsCurrentTime() 的 GridDB 时间序列容器的 Rowkey

问题描述

我有来自各种各样的传感器的输入,每个传感器只产生一两行输入,因此为每个传感器创建一个新容器几乎没有意义。数据按不应该丢失的顺序出现,因此我考虑在输入行到来时枚举输入行并相应地分配数字。然后,我想提供有关数据输入之间间距的更多信息。在首先将 id 调整为不再是连续的之后,我现在将时间戳视为行键,并在将数据写入一行时分配它们。我发现其他数据库提到这可能会导致问题,因为数据现在包含在技术上与它没有直接关联的信息。
所以基本上rowkey是由以下设置的:gsSetRowFieldByTimestamp(row, 0, gsCurrentTime()); 使用上述时间函数为时间序列提供行键是否合适?任何可预见的问题,除了可能明显的问题,这有效地阻碍了 gsCurrentTime() 的解析?

标签: cgriddb

解决方案


首先,即使传感器只有几列,我相信数据模式仍然应该是每个设备一个容器。是的,这似乎很浪费,但它是 GridDB 的方式。如果使用集群,GridDB 需要多个容器在其节点之间分区数据。使用多查询将消除应用程序读取端的任何性能问题。

现在,如果您坚持使用单个容器,请务必注意您的数据收集器必须是单线程的,以避免理论上的行键冲突,是的,在 Java 中使用 gsCurrentTime() 或 TimestampUtils.current。


推荐阅读