Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 记录大量印象数据(5000万条记录/月)_Mysql_Mongodb_Hadoop_Database_Nosql - Fatal编程技术网

Mysql 记录大量印象数据(5000万条记录/月)

Mysql 记录大量印象数据(5000万条记录/月),mysql,mongodb,hadoop,database,nosql,Mysql,Mongodb,Hadoop,Database,Nosql,我们目前正在使用MySQL记录几个网站的印象数据,并正在寻找一个更合适的替代品来记录我们网站现在看到的高流量。MySQL数据库最终需要的是聚合数据 我所说的“高容量”是指我们每月为这个印象数据记录大约5000万条记录。需要注意的是,此表活动几乎完全是写入,很少是读取。(与SO上的此用例不同:)。我们通过按范围对数据进行分区并执行大容量插入,解决了一些MySQL性能问题,但从总体上看,我们不应该使用MySQL 我们在MySQL数据库中最终需要的是聚合数据,我相信还有其他技术更适合这个用例的大容量日

我们目前正在使用MySQL记录几个网站的印象数据,并正在寻找一个更合适的替代品来记录我们网站现在看到的高流量。MySQL数据库最终需要的是聚合数据

我所说的“高容量”是指我们每月为这个印象数据记录大约5000万条记录。需要注意的是,此表活动几乎完全是写入,很少是读取。(与SO上的此用例不同:)。我们通过按范围对数据进行分区并执行大容量插入,解决了一些MySQL性能问题,但从总体上看,我们不应该使用MySQL

我们在MySQL数据库中最终需要的是聚合数据,我相信还有其他技术更适合这个用例的大容量日志部分。我已经读过(和),我觉得我在正确的轨道上,但需要一些关于我应该关注什么技术(或组合)的指导


我特别想知道的是,哪些平台最适合大容量日志记录,以及如何每天将聚合/精简的数据集输入MySQL。

一种方法是简单地将原始impression日志转储到平面文件中。每天都会有一批使用MapReduce程序处理这些文件。MapReduce聚合输出可以存储到配置单元或HBase中


请让我知道,如果你发现这个方法有任何问题。Bigdata技术堆栈根据数据类型和聚合方式有许多选项。

Hive不存储信息,它只允许您使用类似sql语言(HQL)查询“原始”数据

如果您的聚合数据足够小,可以存储在MySQL中,并且这是您的数据的唯一用途,那么HBase对您来说可能太多了

我的建议是使用Hadoop(HDFS和MapReduce)

  • 使用impression事件创建日志文件(文本文件)
  • 然后将它们移动到HDFS中(如果您需要接近实时的解决方案,可以使用kafka或storm)
  • 创建一个能够读取和聚合日志的MapReduce作业,并在reduce输出中使用DBOutputFormat将聚合数据存储到MySql中

  • 使用MapReduce(或类似技术),我想到了每日批处理但是,我们想要解决的核心问题是不使用MySQL进行大容量的impression日志记录。这是另一个存储选项发挥作用的地方,例如Hive或HBase。我曾考虑将聚合数据存储在MySQL中,尽管它可以与原始日志记录存储在同一个数据存储中ata.您会推荐Hive或HBase用于原始印象日志记录吗?对于原始印象日志记录,这取决于数据是否是结构化的,是否可以以表格格式表示。在这种情况下,您可以使用Hie。是的,聚合数据将减少到每天约100条记录,这在MySQL中是非常易于管理的。您能否详细说明关于#1?我们在应用程序中使用PHP,如果我理解正确,我们只需将impression事件写入文件系统。cron作业可以定期运行,将这些数据移动到HDFS中。如果我们选择#2中的替代方案,我们是否会将应用程序中的数据直接馈送到kafka或storm中,从而消除#1?谢谢反馈。要充分利用hadoop的功能,您必须使用HDFS文件系统作为存储(具有分布式处理的分布式文件系统)。有不同的方法将数据放入HDFS。对于非实时解决方案,最常见的情况是在web应用程序或bckend(您的php应用程序)中本地生成日志文件然后将它们移动到hdfs中。Distcp是一个很好的工具,可以在hdfs内部和外部复制数据,使用起来非常方便。Kafka和storm更容易在运行时接收源应用程序生成的事件,并且每次时间或事件都会在hdfs文件系统中生成一个文件(在我们的例子中)。在这种情况下,要将日志写入文件系统,您需要将事件发送到队列(kafka)。无法避免将事件写入文件并发送到某个地方。不同之处在于体系结构的复杂性(可能是步骤的顺序)。最简单的解决方案是在本地写入日志,然后使用Distcp将文件发送到HDFS。我一直在阅读HDFS,从技术上看,这听起来确实是一个可行的解决方案。我主要关心的是成本。我们在Rackspace上运行,似乎至少需要一些云服务器来专门用于Hadoop。Rackspace有一个“大数据”提供,但这对于我们的需求来说是非常昂贵的。对于Hadoop部署,您建议的最低设置是什么?谢谢,这是非常有用的信息。这一切都取决于您的数据量和聚合的复杂性。但我想您可以使用像EMR(亚马逊服务)这样的Hadoop随需应变集群。您只需支付使用群集的时间。然后执行一个小作业daili应该不会太贵。问题是,您无法直接访问他们的文件系统,他们也无法直接访问您的数据库。然后,您应该使用他们的文件系统,如Amazon案例中的S3,然后您将需要传输他将输出到yout系统,然后将结果上传到MySQL中。