任务是从已完成的研究项目中筛选和分析大量日志文件(约8TB)。这个想法是用数据填充数据库,以便以后能够运行不同的分析任务。
值以逗号分隔。原则上,值是最多5个值的元组:
id, timestamp, type, v1, v2, v3, v4, v5
在第一次尝试使用MySQL时,我使用了一个表,每行一个日志条目。所以对数值之间没有直接关系。这里的缺点是查询子集的速度很慢。
因为没有关系,我研究了像NoSQL数据库这样的替代品,像hbase或cassandra这样的基于列的表似乎非常适合这类数据。但这些系统是为大型分布式系统而设计的,而我们没有。在我们的例子中,分析将运行在一台机器或一些虚拟机上。
哪种数据库适合这个任务?是否值得用hadoop+hbase建立一个单机实例…还是说这有点太大了?
选择哪个数据库进行高性能日志文件分析?
EDIT:也许我的问题不清楚我们不能花钱购买云服务或新硬件。问题是使用noSQL方法而不是mySQL是否有好处(特别是对于这些数据)。如果没有,或者如果它们太小,设置一个noSQL系统的努力是不值得的,我们可以使用我们的ESXi基础设施和MySQL。
EDIT2:我这里仍然有问题。我对MySQL做了进一步的实验,只插入了所有可用数据的四分之一。插入现在已经运行了超过2天,还没有完成。目前,在我的单表db中有2,147,483,647行。对于索引,这需要21.1 gb的磁盘空间。这只是所有记录数据的四分之一……格式为
的查询SELECT * FROM `table` WHERE `timestamp`>=1342105200000 AND `timestamp`<=1342126800000 AND `logid`=123456 AND `unit`="UNIT40";
需要761秒才能完成,在本例中返回一行。在时间戳、逻辑gid、单位上有一个组合索引
所以我认为这不是要走的路,因为在稍后的分析中,我将不得不获得一个时间范围内的所有条目并比较数据点。
我读了关于MongoDB和Redis,但问题是,他们是在内存数据库。
在后面的分析过程中会有非常少量的并发数据库访问。事实上,分析将在一台机器上运行。我不需要冗余。我将能够在失败的情况下重新生成数据库。当数据库写入完成后,也不需要更新或添加更多的行。
你如何看待Redis、MongoDB等替代方案?当我得到这个正确的,我将需要RAM在我的数据的维度…这个任务在单节点系统或双节点系统中是否可行?
我个人更喜欢更快的解决方案,因为您说您需要高性能分析。问题是,如果您必须设置一个全新的系统来实现这一点,并且与您需要的额外工作相比,性能改进将是微不足道的,那么请继续使用SQL。
在我们公司,我们有一个非常小的数据库,在VM上包含甚至不到半GB的数据。现在的问题是,一旦你使用VM,你就会有主要的性能问题,当你在VM上打开数据库时,你可以在此期间去喝杯咖啡;)
但是,如果数据库加载到缓存的时间不是那么重要,那就不重要了。这完全取决于您认为新系统将有多快,以及您将投入多少精力,但正如我所说,如果您必须进行"高性能分析",我更喜欢更快的解决方案