【问题标题】:"Transactional safety" in influxDBinfluxDB 中的“事务安全”
【发布时间】:2023-03-17 04:14:01
【问题描述】:

我们有一个场景,我们想要频繁更改(单个)测量值的标签。 我们的目标是创建一个存储预后值的数据库。但它绝不应该丢失数据并跟踪对已写入数据的更改,例如更改或覆盖。

我们目前的计划是增加一个字段“write_ts”,它指示测量值是在哪个时间点插入或更改的,以及一个随每次更改而更新的标签“版本”。 此外,版本“0”应始终包含最新值。

name: temperature
-----------------
time                    write_ts (val) current_mA (val) version (tag)     machine (tag)
2015-10-21T19:28:08Z    1445506564     25               0                 injection_molding_1

所以假设我有一个更新的预测值这个示例值。

所以,我愿意:

SELECT curr_measurement
INSERT curr_measurement with new tag (version = 1)
DROP curr_mesurement
//then
INSERT new_measurement with version = 0

现在我的问题:

如果我因为任何原因在 SELECT、INSERT、DROP 之间失去了连接:

我会得到双倍的记录。

(或者如果我执行 SELECT、DROP、INSERT:我丢失了数据

有什么方法可以防止吗?

【问题讨论】:

    标签: influxdb influxql


    【解决方案1】:

    InfluxDB 中不存在事务

    InfluxDB 是时间序列数据库,而不是关系数据库。它的主要用例不是用户编辑旧数据的用例。

    在支持事务的关系数据库中,您可以保护自己免受UPDATE 和类似操作的侵害。数据进来,现有数据发生变化,您需要可靠地读取这些更新。

    时间序列数据库的主要用例是大量原始数据进入,然后进行一些过滤或转换为其他测量或数据库。想象一个单向数据流。在这种情况下,不需要太多事务,因为旧数据没有得到太多更新。

    如何使用 InfluxDB

    在像您这样的情况下,根据实时数据计算额外数据时,通常会将这些新数据放在自己的测量中,而不是作为“实时数据”测量中的新字段。

    关于版本跟踪和可靠获取更新:

    1) version 号码能告诉您write_ts 号码不能告诉您的任何信息吗?如果它只是write_ts 的代理,请考虑不使用它。如果version 只增加,它可能会重复write_ts 提供的信息,减去知道何时进行更改的有用性。如果version 预计会不时减少,那么保留它是有意义的。

    2) 同样,如果您保留旧记录:write_ts 是否会告诉您 time 值没有告诉您的任何事情?

    3) 日志记录。您是否需要覆盖(更新)值?或者您可以通过添加新行来获得所需的内容,并酌情增加write_tsversion。后者是一种更“InfluxDB-ish”的方法。

    4) 读取值。您可以读取所有值,因为它们会随着更新而变化。如果客户端应用只需要知道正在更新的内容的最新值(以及更新时间),则查询会变成:

    SELECT LAST(write_ts), current_mA, machine FROM temperature
    

    您也可以尝试将机器值组合在一起:

    SELECT LAST(*) FROM temperature GROUP BY machine
    

    那么会发生什么而不是交易呢?

    在 InfluxDB 中,插入具有相同标签键和时间戳的点会覆盖具有相同字段键的任何现有数据,并添加新的字段键。因此,当写入重复条目时,最后写入“获胜”

    因此,与传统的SELECT, UPDATE 方法不同,它更像SELECT A,然后在A 上计算,并将结果放入B,可能带有新的时间戳INSERT B

    就我个人而言,我发现 InfluxDB 非常出色,因为它能够接受来自各个方向的数据流,而且其简单的协议和无模式存储意味着添加新数据源几乎是微不足道的。但如果我的用例有定期更新的旧数据,我会使用关系数据库。

    希望消除分歧。

    【讨论】:

      猜你喜欢
      • 2018-03-18
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      相关资源
      最近更新 更多