Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 事件时间序列的数据库建议_Database_Time Series - Fatal编程技术网

Database 事件时间序列的数据库建议

Database 事件时间序列的数据库建议,database,time-series,Database,Time Series,对于我的一个项目,我必须将一个大的事件集合输入数据库,以便以后进行处理,我正在尝试决定哪个DBMS最适合我的目的 我有: 目前大约有400000000个离散事件 大约600 GB的数据将存储在数据库中 这些事件有多种格式,但我估计单个属性的数量约为5000。大多数事件仅包含每个属性大约100个值。属性值将被视为任意字符串,在某些情况下,还将被视为整数 这些事件最终将合并为一个时间序列。虽然它们有一些内部结构,但没有对其他事件的引用,我相信这意味着我不需要对象数据库或某种ORM系统 我的要求:

对于我的一个项目,我必须将一个大的事件集合输入数据库,以便以后进行处理,我正在尝试决定哪个DBMS最适合我的目的

我有:

  • 目前大约有400000000个离散事件

  • 大约600 GB的数据将存储在数据库中

这些事件有多种格式,但我估计单个属性的数量约为5000。大多数事件仅包含每个属性大约100个值。属性值将被视为任意字符串,在某些情况下,还将被视为整数

这些事件最终将合并为一个时间序列。虽然它们有一些内部结构,但没有对其他事件的引用,我相信这意味着我不需要对象数据库或某种ORM系统

我的要求:

  • 开源许可证-我可能需要稍微调整一下

  • 通过能够扩展到多台服务器而实现的可扩展性,尽管最初只使用一个系统

  • 快速查询-更新没有那么重要

  • C/C++、Java和Python的成熟驱动程序/绑定。更喜欢与他人合作良好的许可证——我不愿意因为技术决定而承诺任何事情。我认为大多数DB驱动程序在这里没有问题,但无论如何都应该提到

  • Linux的可用性

  • 如果它也可以用于Windows,那就太好了,但不是必须的

我的理想数据库将允许我通过一个查询检索指定时间段内的所有事件

到目前为止,我的发现/思考:

  • 随着页面大小的增加,显然每个表中最多可以有6000列。如果我对属性计数的估计值不为off,则可能是

  • 似乎每个表有4000列的限制。我可以使用多个表和一些SQL fu,但我不希望这样

  • 这是我目前倾向的。这将允许我保留事件的内部结构,同时仍然能够查询它们。它的API似乎也很直截了当。我不知道它在性能方面做得有多好——至少在一台服务器上是这样

  • 它的度量集合框架听起来很有趣。我可以为每个属性使用一个时间序列(这可能有助于我的一些处理),将属性值作为标记,另外标记条目以将它们与特定事件关联。从管理员和应用程序程序员的角度来看,它的准备曲线可能比上面三个更陡峭。不知道它的性能

  • 直接使用。这可能更符合我的要求,尽管从我过去使用hadoop的经验来看,管理开销可能仍然高于前三个选项

可能还有其他数据库可以做到这一点,所以请随时让我知道-我将感谢任何可能对我有帮助的建议或评论


PS:我作为数据库管理员的经验很少,因此我为任何误解道歉。

使用具有数千列的表是疯狂的。特别是当他们中的大多数都是零的时候,就像你说的

您应该首先考虑从以下内容转换数据结构:

table_1
-------
event_id
attribute_1
attribute_2
[...]
attribute_5000
变成这样:

table_1          event_values             attributes
--------         ------------             ----------
event_id         event_id                 attribute_id
                 attribute_id             attribute_type
                 attribute_value

它可以与任何RDM一起使用(您唯一的限制是数据库的总大小和性能)

答案可能已经很晚了,但下面是我要做的

我使用HDF5作为我的时间序列存储库。它有许多有效和快速的压缩风格,可以混合和匹配。它可以与许多不同的编程语言一起使用。它在Windows和Linux上都可用

我使用boost::date\u time作为时间戳字段。这允许进行大量基于日期时间的计算

在金融领域,我然后为每个条、刻度、交易、报价等创建特定的数据结构


我创建了许多自定义迭代器,并使用标准模板库算法来高效地搜索基于时间的记录的特定值或范围。然后可以将所选内容加载到内存。

大多数(全部?)SQL数据库管理系统对一行的字节数也有限制。根据特定的dbms,它可能是硬限制(无法创建一行存储超过8k字节的表)或软限制(某些列可能会移动到db中的备用存储位置,这会影响性能),性能和易用性是最重要的。无论如何,您提出的模式是一个基本的ORM模式,应该可以用于任何关系数据库,这就是为什么我会接受这个答案。