gpt4 book ai didi

database - 时间序列数据的键值存储?

转载 作者:太空狗 更新时间:2023-10-30 01:42:54 24 4
gpt4 key购买 nike

我一直在使用 SQL Server 存储几十万个对象的历史时间序列数据,每天观察大约 100 次。我发现查询(在时间 t1 和时间 t2 之间给我对象 XYZ 的所有值)太慢(对于我的需要,慢是一秒钟以上)。我正在按时间戳和对象 ID 编制索引。

我考虑过使用像 MongoDB 这样的键值存储来代替,但我不确定这是否是对这种东西的“适当”使用,而且我找不到任何提及将这样的数据库用于时间序列数据。理想情况下,我能够执行以下查询:

  • 检索时间 t1 和时间 t2 之间对象 XYZ 的所有数据
  • 执行上述操作,但每天返回一个日期点(第一个、最后一个、关闭到时间 t...)
  • 检索特定时间戳的所有对象的所有数据

数据应该是有序的,理想情况下写入新数据和更新现有数据应该很快。

似乎我希望通过对象 ID 和时间戳进行查询可能需要以不同的方式对数据库的两个副本进行索引以获得最佳性能......任何人都有使用 key 构建这样的系统的经验-值(value)存储,或HDF5,或其他什么?还是这在 SQL Server 中完全可行,我只是做得不对?

最佳答案

听起来 MongoDB 非常适合。更新和插入非常快,因此您可能希望为每个事件创建一个文档,例如:

{
object: XYZ,
ts : new Date()
}

然后你可以索引ts字段,查询也会很快。 (顺便说一句,您可以在单个数据库上创建多个索引。)

如何进行三个查询:

retrieve all the data for object XYZ between time t1 and time t2

db.data.find({object : XYZ, ts : {$gt : t1, $lt : t2}})

do the above, but return one date point per day (first, last, closed to time t...)

// first
db.data.find({object : XYZ, ts : {$gt : new Date(/* start of day */)}}).sort({ts : 1}).limit(1)
// last
db.data.find({object : XYZ, ts : {$lt : new Date(/* end of day */)}}).sort({ts : -1}).limit(1)

最近一段时间,您可能需要自定义 JavaScript 函数,但这是可行的。

retrieve all data for all objects for a particular timestamp

db.data.find({ts : timestamp})

欢迎调用 user list 询问如果您有任何疑问,其他人可能会想到一种更简单的方法来获取最近发生的事件。

关于database - 时间序列数据的键值存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1683825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com