对于我的其中一个项目,我必须将大量事件集合输入到数据库中供以后处理,并且我试图确定哪个DBMS最适合我的用途。针对时间序列事件的数据库建议
我:
关于4亿在数据的时刻
约600 GB将存储在数据库中
这些事件来在离散事件各种格式,但我估计个人属性的数量约为5000。大多数事件只包含每个约100个属性的值。属性值将被视为任意字符串,在某些情况下,则是整数。
事件最终将整合到一个时间序列中。虽然他们确实有一些内部结构,但没有提到其他事件,我相信这意味着我不需要对象数据库或某种ORM系统。
我的要求:
开源许可 - 我可能要调整了一点。
可扩展到多个服务器,但首先只使用一个系统。
快速查询 - 更新没有那么重要。
C/C++,Java和Python的成熟驱动程序/绑定。最好使用与其他玩家合作的许可证 - 我宁愿不因技术决定而对任何事情做出承诺。我认为大多数数据库驱动程序在这里没有问题,但无论如何它应该被提及。
Linux的可用性。
这将是很好,但不是必须的,如果它也可用于Windows
我理想中的DB因为这将让我从指定的时间段内的所有事件与单个查询。
我发现/迄今认为:
Postgresql与增加的页面大小可以明显地在每个表最多6000列。如果我的属性数量估计没有关闭,它可能会这样。
MySQL似乎每表有4,000列的限制。我可能用一点SQL-fu使用多个表,但我宁愿不。
MongoDB是我目前所倾向的。这将允许我保留事件的内部结构,同时仍然能够查询它们。其API也似乎非常直截了当。我不知道它在性能方面表现如何 - 至少在一台服务器上。
OpenTSDB及其度量收集框架听起来很有趣。我可以为每个属性使用单个时间序列(这可能有助于我的一些处理),将属性值作为标记并附加标记条目以将其关联到特定事件。从管理员和应用程序员的角度来看,这三者的准备曲线可能陡峭一些。不知道它的表现。直接使用HBase。尽管从我过去使用hadoop的经验来看,这可能会比我的要求更符合我的要求,但管理费用可能仍高于前三种选择。
有可能是其他数据库可以做到这一点,所以随时让我知道 - 我会很感激任何建议或评论,可能会帮助我与此。 PS:作为DB管理员,我只有很少的经验,所以我对任何误解表示歉意。
大多数(所有?)SQL数据库管理系统对一行中的字节数也有限制。根据特定的dbms,它可能是一个硬限制(无法创建一个表可能会在一行中存储超过8k字节)或软限制(某些列可能会被移动到db内的一个备用存储位置,影响性能)。 – 2011-02-10 22:27:14