对于我的一个项目,我必须将大量事件集合输入数据库以供以后处理,并且我正在尝试确定哪个 DBMS 最适合我的目的。
I have:
目前大约有 400,000,000 个离散事件
数据库中将存储约 600 GB 的数据
这些事件有多种形式,但我估计单个属性的数量约为 5,000 个。大多数事件每个仅包含大约 100 个属性的值。属性值将被视为任意字符串,在某些情况下,被视为整数。
这些事件最终将合并为一个时间序列。虽然它们确实有一些内部结构,但没有对其他事件的引用,我相信这意味着我不需要对象 DB 或某些 ORM 系统。
我的要求:
开源许可证 - 我可能需要稍微调整一下。
尽管一开始只使用一个系统,但能够扩展到多个服务器,从而实现可扩展性。
快速查询 - 更新并不那么重要。
适用于 C/C++、Java 和 Python 的成熟驱动程序/绑定。最好拥有与其他人兼容的许可证 - 我宁愿不因为技术决定而承诺任何事情。我认为大多数数据库驱动程序在这里都没有问题,但无论如何应该提到这一点。
适用于 Linux。
如果它也适用于 Windows,那就太好了,但不是必需的
我理想的数据库将允许我通过单个查询检索指定时间段内的所有事件。
到目前为止我发现/考虑到的:
PostgreSQL http://www.postgresql.org/随着页面大小的增加,每个表中显然可以有多达 6,000 列。如果我对属性计数的估计没有偏离,那么它可能会偏离。
MySQL http://www.mysql.com/每个表似乎有 4,000 列的限制。我could使用带有一点 SQL 功能的多个表,但我不想这样做。
MongoDB http://www.mongodb.org/是我目前所倾向于的。它允许我保留事件的内部结构,同时仍然能够查询它们。它的 API 看起来也相当简单。我不知道它在性能方面表现如何 - 至少在单个服务器上。
OpenTSDB http://www.opentsdb.net/它的度量收集框架听起来很有趣。我可以为每个属性使用单个时间序列(这可能有助于我的一些处理),将属性值作为标签,并另外标记条目以将它们与特定事件相关联。从管理员和应用程序程序员的角度来看,它可能比上面三个有更陡峭的准备曲线。不知道它的性能。
Use HBase http://hbase.apache.org/直接地。这可能比更符合我的要求OpenTSDB http://www.opentsdb.net/,尽管 - 从我过去使用 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
它可以与任何 RDMS 一起使用(唯一的限制是数据库的总大小和性能)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)