【发布时间】:2023-03-22 01:54:01
【问题描述】:
对于我的一个项目,我必须将大量事件输入数据库以供以后处理,并且我正在尝试确定哪种 DBMS 最适合我的目的。
我有:
目前大约有 400,000,000 个离散事件
大约 600 GB 的数据将存储在数据库中
这些事件有多种格式,但我估计单个属性的数量约为 5,000。大多数事件每个仅包含大约 100 个属性的值。属性值将被视为任意字符串,在某些情况下,还可以视为整数。
这些事件最终将合并为一个时间序列。虽然它们确实有一些内部结构,但没有对其他事件的引用,我相信这意味着我不需要对象数据库或一些 ORM 系统。
我的要求:
开源许可证 - 我可能需要稍微调整一下。
通过能够扩展到多台服务器的可扩展性,尽管一开始只会使用一个系统。
快速查询 - 更新并不那么重要。
适用于 C/C++、Java 和 Python 的成熟驱动程序/绑定。最好拥有与他人合作良好的许可证 - 我宁愿不因为技术决定而承诺任何事情。我认为大多数DB驱动在这里都没有问题,但无论如何应该提到。
适用于 Linux。
如果它也可用于 Windows,那就太好了,但不是必需的
我的理想数据库将允许我通过单个查询检索指定时间段内的所有事件。
到目前为止我发现/考虑的内容:
Postgresql 随着页面大小的增加,每个表中显然可以有多达 6,000 列。如果我对属性计数的估计没有偏差,它可能会。
MySQL 似乎每个表有 4,000 列的限制。我可以使用带有一点 SQL-fu 的多个表,但我宁愿不这样做。
MongoDB 是我目前的倾向。它可以让我保留事件的内部结构,同时仍然能够查询它们。它的 API 看起来也很简单。我不知道它在性能方面的表现如何 - 至少在单个服务器上。
OpenTSDB 及其度量收集框架听起来很有趣。我可以为每个属性使用单个时间序列(这可能有助于我的某些处理),将属性值作为标记并另外标记条目将它们与特定事件相关联。从管理员和应用程序程序员的角度来看,它可能具有比上述三个更陡峭的准备曲线。不知道它的性能。
直接使用HBase。这可能比 OpenTSDB 更符合我的要求,尽管 - 从我过去使用 hadoop 的经验来看 - 管理开销可能仍然高于前三个选项。
可能还有其他数据库可以做到这一点,所以请随时告诉我 - 如果有任何建议或评论可能对我有所帮助,我将不胜感激。
PS:我作为数据库管理员的经验很少,因此对于任何误解,我深表歉意。
【问题讨论】:
-
大多数(全部?)SQL 数据库管理系统也对一行中的字节数有限制。根据特定的 dbms,它可能是硬限制(无法创建可能在一行中存储超过 8k 字节的表)或软限制(某些列可能会移动到 db 中的备用存储位置,这影响性能)。
标签: database time-series