【发布时间】:2013-01-09 08:51:55
【问题描述】:
任务是从已完成的研究项目中过滤和分析大量日志文件(大约 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 ...... 单节点系统或两个节点是否有可能完成这项任务?
【问题讨论】:
-
如果您需要这样做但没有相应的系统,您可以看看像亚马逊这样的解决方案,您可以在指定时间内使用它们。与投资硬件相比,这使您能够非常简单且经济地进行此类大数据分析。
-
出于隐私和财务方面的考虑,我们不能使用像亚马逊这样的资源。
-
好的,明白了,接下来是一个重要的问题:你有多少硬件?这是8TB的数据,根据您拥有的系统,我们可以给出更明确的答案。现在发生的情况是,您要求提供性能建议,但没有提供以下信息:系统、它们的性能、它的可用性(你可以在没有其他用户的情况下使用它几天)以及你想做什么样的分析。所有缺失的部分使得无法给出好的建议。需要明确的是:您将需要一些重要的内存来分析 8TB 的数据。但是,例如,如果您可以拆分它,我们的创建聚合就更容易了。
-
有几个 ESXi 服务器可以使用,可能只有一个(8 核 24GB RAM)。分析将类似于“给我所有 id=x 和 type=y 以及范围内的时间戳的日志条目......”然后我们将查看这些值以分析项目特定参数。确切的分析问题还有待确定。日期应采用我们可以轻松进行此类分析的形式。
标签: sql database nosql analysis logfile