我可以考虑使用哪些解决方案/模式来存储数百万个原始数据?

时间:2013-05-12 14:57:50

标签: mongodb redis analytics bigdata

寻找有关存储原始数据的意见。这类数据属于“追踪任何事物”的范畴。主要用于内部分析,以驱动方向,测试新功能等。

存储数据非常简单。只需将其转储到日志文件中,无需数据库。另一方面,如果您想对其执行复杂的分析和数据挖掘,那么数据库是有帮助的。

所以我在考虑在Redis中存储原始数据。 Redis写作速度很快。不适合存档。适合短暂的数据。我可以写信给Redis,然后将结果集存档以备日后用,如果需要的话。

归结为聚合为更易读/分组的格式。像Postgres这样的RDBMS就足够了。但是,我在考虑使用MongoDB的文档结构。通过添加聚合框架,非常适合读取。

我可以定期聚集来自Redis的原始数据,可能是在cron作业或工作进程中。

所以这是一个例子。我非常热衷于Mongodb的聚合部分。我可以考虑使用哪些其他设置/解决方案来存储数百万个原始数据?有什么最好的做法?

2 个答案:

答案 0 :(得分:1)

  

存储数据非常简单。只需将其转储到日志文件中,无需数据库。另一方面,如果您想对其执行复杂的分析和数据挖掘,那么数据库是有帮助的。

这是部分正确的。数据库绝对不错,但如果你想对大数据进行大量的分析查询,Hadoop也是一个非常好的选择(Pig或Hive使这很容易)。我玩过Mongo的聚合框架并且不喜欢它,就像在Hadoop上使用Pig / Hive一样。它也没有几乎同样大的用户网络。

所以,这里的答案很大程度上取决于你的用例。您希望在(半)实时进行什么样的分析,以及您希望以后批量或手动进行哪种分析?

根据您的帖子,听起来您大多希望稍后根据具体情况进行分析。为此,我会100%使用KafkaFluentd等日志框架来抓取数据,并将其传输到不同的位置。这些框架都提供了并行性和冗余,以便在数据进入时移动数据。

对于接收器,我将使用HDFS或S3进行冷存储,以便以后进行批处理。通过这两者,您可以获得超过Hadoop的冗余和可用性。对于实时处理,如果您需要,我会使用Storm。您还可以随时向Mongo添加额外的接收器,例如,如果您还要存储到数据库中。这是关于日志框架的最好的事情之一:你可以很容易地添加更多的接收器和更多的机器。

Redis有很多很好的用例 - 特别是如果你想要一个缓存,或者对简单数据结构的快速操作。除非我误解了你想要的东西,否则我不认为Redis在这里特别有帮助。

Mongo可能对你有用,如果除了你的某些聚合的分析查询之外,你还想查询特定的项目,或者你想要快速运行查询(希望Hadoop查询不要少于30秒 - 即使是简单的事情。在这种情况下,就像我提到的那样,你只需为Mongo添加一个额外的接收器。如果您不确定是否需要,可以随后添加。

答案 1 :(得分:0)

我会考虑使用NOSQL选项,例如mongodb。在我看来,它具有令人难以置信的可扩展性和极高的效率。就个人而言,我已经从事过这种规模的项目,每次都喜欢NOSQL解决方案,比如mongodb。