0

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

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

所以我正在考虑将原始数据存储在 Redis 中。Redis 的写入速度很快。不适合存档。非常适合临时数据。如果需要,我可以写信给 Redis,然后将结果集存档以供将来分析。

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

我可以分批聚合来自 Redis 的原始数据,也许是在一个 cron 作业或工作进程中,定期。

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

4

2 回答 2

1

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

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

因此,这里的答案很大程度上取决于您的用例。你想(半)实时进行什么样的分析,以后你想批量或手动进行什么样的分析?

根据您的帖子,听起来您最想稍后根据具体情况进行分析。为此,我会 100% 使用KafkaFluentd 之类的日志框架来抓取数据,并将其流式传输到不同的地方。这些框架都为移动数据提供了并行性和冗余性。

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

Redis 有很多很棒的用例——特别是如果你想要缓存,或者对简单数据结构进行真正快速的操作。除非我误解了您想要什么,否则我认为 Redis 在这里并没有特别的帮助。

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

于 2013-05-13T05:57:12.200 回答
0

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

于 2013-05-12T15:00:09.963 回答