1

任务是从已完成的研究项目中过滤和分析大量日志文件(大约 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... 这个任务是否可以通过单节点系统或可能有两个节点以某种方式实现?

4

1 回答 1

0

好吧,我个人更喜欢更快的解决方案,因为您说您需要高性能分析。问题是,如果您必须设置一个全新的系统来执行此操作,并且与您需要的额外工作相比,性能改进将是次要的,那么请继续使用 SQL。

在我们公司,我们有一个很小的数据库,在 VM 上甚至包含不到半 GB 的数据。现在的问题是,一旦您使用虚拟机,就会遇到严重的性能问题,在虚拟机上打开数据库时,您可以同时去喝杯咖啡;)

但是,如果数据库加载到缓存之前的时间不是那么重要,那也没关系。这完全取决于您认为新系统的速度有多快,以及您必须投入多少精力,但正如我所说,如果您必须进行“高性能分析”,我更喜欢更快的解决方案

于 2013-01-09T09:05:54.773 回答