由于 GridDB 的 TIME SERIES 类型容器中 TIMESTAMP 字段的大小/定义可能导致记录冲突
Possible record collisions due to the size / definition of the TIMESTAMP field in the TIME SERIES type containers of GridDB
我正在使用 GridDB,我发现在插入过程中丢失了记录,我将其归因于缺少时间戳字段的定义。
我试图在输入字段中给出更多定义,但保存它使它成为 trim。日志未显示任何数据丢失或错误写入。
一个查询数据库:
[{
"columns":[
{"name":"original_timestamp","type":"TIMESTAMP"},
{"name":"FIELD_A","type":"STRING"}
...
{"name":"FIELD_Z","type":"STRING"}
{"name":"code_timestamp","type":"STRING"}],
"results":[
"2019-07-19T11:28:42.328Z",
"SOME String Value for A",
...
"SOME String Value for Z",
"2019-07-19 11:28:59.239922"}
]
注册摄入量低于预期。
我们正在研究基于两个索引的模型。还有其他想法和/或有用的经验吗?
提前致谢!
GridDB 以毫秒分辨率存储 TIMESTAMP 值,插入具有更高分辨率(例如微秒或纳秒分辨率)的记录将导致时间戳值被截断。
可以通过三种方式来解决时间戳冲突:
使用 long 作为第一个索引的集合。在那么长的时间里,根据需要以微秒或纳秒为单位存储一个 Unix 纪元。您显然会丢失一些时间序列函数,并且必须手动将比较运算符转换为所需分辨率的 Unix 纪元。
使用集合并禁用行键(在Java中没有@RowKey标签或在其他语言中将ContainerInfo中的最后一个布尔值设置为False)。这将允许多个记录具有相同的 "row key value"。您可以在此列上启用二级索引以确保查询仍然很快。 TIMESTAMP 和 TO_TIMESTAMP_MS 函数仍然有效,但我相当确定 none 其他特殊时间戳函数会起作用。当我不得不在 GridDB 中处理时间戳冲突时,这是我选择的解决方案。
在插入之前检测冲突,如果有冲突,将冲突记录写入单独的容器。使用 multi-get/query 查询所有容器。
我正在使用 GridDB,我发现在插入过程中丢失了记录,我将其归因于缺少时间戳字段的定义。
我试图在输入字段中给出更多定义,但保存它使它成为 trim。日志未显示任何数据丢失或错误写入。
一个查询数据库:
[{
"columns":[
{"name":"original_timestamp","type":"TIMESTAMP"},
{"name":"FIELD_A","type":"STRING"}
...
{"name":"FIELD_Z","type":"STRING"}
{"name":"code_timestamp","type":"STRING"}],
"results":[
"2019-07-19T11:28:42.328Z",
"SOME String Value for A",
...
"SOME String Value for Z",
"2019-07-19 11:28:59.239922"}
]
注册摄入量低于预期。 我们正在研究基于两个索引的模型。还有其他想法和/或有用的经验吗?
提前致谢!
GridDB 以毫秒分辨率存储 TIMESTAMP 值,插入具有更高分辨率(例如微秒或纳秒分辨率)的记录将导致时间戳值被截断。 可以通过三种方式来解决时间戳冲突:
使用 long 作为第一个索引的集合。在那么长的时间里,根据需要以微秒或纳秒为单位存储一个 Unix 纪元。您显然会丢失一些时间序列函数,并且必须手动将比较运算符转换为所需分辨率的 Unix 纪元。
使用集合并禁用行键(在Java中没有@RowKey标签或在其他语言中将ContainerInfo中的最后一个布尔值设置为False)。这将允许多个记录具有相同的 "row key value"。您可以在此列上启用二级索引以确保查询仍然很快。 TIMESTAMP 和 TO_TIMESTAMP_MS 函数仍然有效,但我相当确定 none 其他特殊时间戳函数会起作用。当我不得不在 GridDB 中处理时间戳冲突时,这是我选择的解决方案。
在插入之前检测冲突,如果有冲突,将冲突记录写入单独的容器。使用 multi-get/query 查询所有容器。