任务是从已完成的研究项目中过滤和分析大量日志文件(大约 8TB)。这个想法是用数据填充数据库,以便以后能够运行不同的分析任务。
这些值以逗号分隔存储。原则上,这些值是最多 5 个值的元组:
id, timestamp, type, v1, v2, v3, v4, v5
在第一次尝试使用 MySQL 时,我使用了一个表,每行一个日志条目。所以日志值之间没有直接关系。这里的缺点是子集查询缓慢。
因为没有关系,所以我研究了 NoSQL 数据库之类的替代方案,而 hbase 或 cassandra 之类的基于列的表似乎非常适合此类数据。但是这些系统是为我们没有的大型分布式系统而设计的。在我们的例子中,分析将在单台机器或一些虚拟机上运行。
哪种数据库适合这项任务?是否值得使用 hadoop+hbase 设置单个机器实例......或者这有点过大?
您会选择什么数据库来进行高性能日志文件分析?
编辑:也许我的问题是不清楚我们不能花钱购买云服务或新硬件。问题是使用 noSQL 方法而不是 mySQL 是否有好处(尤其是对于这些数据)。如果没有,或者它们太小以至于设置 noSQL 系统的努力不值得,我们可以使用我们的 ESXi 基础架构和 MySQL。
EDIT2:我在这里仍然遇到问题。我对 MySQL 做了进一步的实验,只插入了所有可用数据的四分之一。该插件现在运行了 2 天以上,尚未完成。目前我的单表数据库中有 2,147,483,647 行。随着 indeces,这需要 211,2 GiB 的磁盘空间。这只是所有日志记录数据的四分之一......表单的查询
SELECT * FROM `table` WHERE `timestamp`>=1342105200000 AND `timestamp`<=1342126800000 AND `logid`=123456 AND `unit`="UNIT40";
完成需要 761 秒,在这种情况下返回一行。时间戳、logid、单位有一个组合索引。
所以我认为这不是要走的路,因为在稍后的分析中,我将不得不在一个时间范围内获取所有条目并比较数据点。
我读过 MongoDB 和 Redis,但它们的问题是,它们在内存数据库中。
在后面的分析过程中会有非常少量的并发数据库访问。事实上,分析将在一台机器上运行。我不需要冗余。如果发生故障,我将能够重新生成数据库。当数据库完全写入后,也无需更新或添加更多行。
您如何看待 Redis、MongoDB 等替代方案。当我做到这一点时,我需要数据维度的 RAM... 这个任务是否可以通过单节点系统或可能有两个节点以某种方式实现?