- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
寻找有关存储原始数据的意见。属于“跟踪任何事物”类别的数据类型。主要用于内部分析驱动方向、测试新功能等。
存储数据非常简单。只需将其转储到日志文件中,不需要数据库。另一方面,如果你想对其进行复杂的分析和数据挖掘,那么数据库是有帮助的。
所以我在考虑将原始数据存储在 Redis 中。 Redis 的写入速度很快。不适合存档。非常适合临时数据。如果需要,我可以写入 Redis,然后将结果集存档以供将来分析。
归结为聚合成更易读/分组的格式。像 Postgres 这样的 RDBMS 就足够了。但是,我正在考虑使用 MongoDB 的文档结构。加上聚合框架,非常适合读取。
我可以批量聚合来自 Redis 的原始数据,也许是在 cron 作业或工作进程中,周期性地。
所以这是一个例子。我非常喜欢 Mongodb 的聚合部分。我可以考虑使用哪些其他设置/解决方案来存储数百万个原始数据?这方面的一些最佳做法是什么?
最佳答案
Storing data is pretty easy. Just dump it into log files, no need for a database. On the other hand, if you want to perform complex analysis and data mining on it, then a database is helpful.
这是部分正确的。数据库绝对不错,但如果您想对大数据进行繁重的分析查询,Hadoop 也是一个非常好的选择(Pig 或 Hive 使这很容易做到)。我玩过 Mongo 的聚合框架,但对它的喜欢程度不及在 Hadoop 上使用 Pig/Hive。它也没有那么大的用户网络。
因此,此处的答案在很大程度上取决于您的用例。您想(半)实时地进行哪种分析,以及您希望以后批量或手动进行哪种分析?
根据您的帖子,听起来您主要是想稍后根据具体情况进行分析。为此,我会 100% 使用像 Kafka 这样的日志记录框架。或 Fluentd在数据传入时获取数据并将其流式传输到不同的地方。这些框架都为移动传入的数据提供并行性和冗余性。
对于接收器,我会使用 HDFS 或 S3 进行冷存储,以便稍后进行批处理。通过这两者,您可以获得比 Hadoop 更高的冗余度和可用性。对于实时处理,如果您需要,我会使用 Storm .您也可以随时向 Mongo 添加额外的接收器,例如,如果您也想存储到数据库中。这是关于日志记录框架的最好的事情之一:您总是可以很容易地添加更多的接收器和更多的机器。
Redis 有很多很棒的用例——尤其是当您需要缓存或对简单数据结构进行真正快速的操作时。除非我误解了您的需求,否则我认为 Redis 在这里不会特别有用。
Mongo 可能对您很有用,如果除了进行某种聚合的分析查询之外,您还想查询特定项目,或者您希望非常快速地运行查询(预计 Hadoop 查询不低于30 秒——即使是简单的事情)。在这种情况下,就像我提到的那样,您只需为 Mongo 添加一个额外的接收器。如果不确定是否需要,您可以随时添加。
关于mongodb - 我可以考虑使用哪些解决方案/模式来存储数百万原始数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16508650/
我一直认为使用“if”比捕获异常要好得多(就性能而言)。例如,这样做: User u = Users.getUser("Michael Jordan"); if(u!=null) System.
我正在尝试使用下一个格式将字符转换为日期。我有下一个数据框 i (我在最后添加了 dput() 版本的数据框): Date 1 Dec_28_2012_9:
考虑到 PHP 中的日期戳,我如何计算持续时间?我在日期之间使用的日期格式是“Y-m-d H:i:s”, 我的工作代码只能计算时间之间的持续时间而不考虑日期。 下面是我的代码: $assigned_t
我正在尝试解释 GLMM 中的自相关。我的响应变量是 bool 值,它表示一组 hive 的生命周期中是否存在 en 事件。我试图用一组描述每个巢状态的数值变量来预测此类事件的概率。因此,我在广义模型
我对如何解释 undefined variable 感到有点困惑(我不确定你现在是否可以)。我正在尝试使用以下代码底部附近的 if else 语句(已注释掉的行)。 这个想法是,如果请求歌曲的人不是与
Bjarne Stroustrup 的 The C++ Programming Language Fourth Edition 中的以下内容是什么意思? "Consider . (dot) suspe
我想要一个主元素,边 block 漂浮在它的右侧。我不知道边 block 的数量,也不知道它们的最终总高度。但是我的主要元素应该具有相同的高度(请参阅以下示例以更好地理解),而无需使用列。 (虚线部分
我在每个 TextView 上都有以下警告(来自 Lint),在我的 XML 中有一个 ID。 Consider making the text value selectable by specify
目前,我有 6 条曲线,以 6 种不同的颜色显示,如下所示。 这 6 条曲线实际上是由 一个相同实验 的 6 次试验生成的。这意味着,理想情况下它们应该是相同的曲线,但由于噪声和不同的试验参与者,它们
winner of a recent Wikipedia vandalism detection competition建议可以通过“检测考虑到 QWERTY 的随机键盘点击来改进检测键盘布局”。 示
多年来,我一直在编写 C 语言,主要是在嵌入式环境中,并且对指针有一个非常好的心智模型——我不必明确地考虑如何使用它们,我对指针算法 100% 感到满意,指针数组,指针指针等。 我写的 C++ 很少,
我正在使用 Boost.Date_time 来获取两个日期之间的时差。我希望代码在这些天也考虑夏令时的变化,并给我正确的时间间隔。 考虑这个例子。 2015 年 11 月 1 日,美国的 DST 将发
我有一个(人类)名字的向量,全部用大写字母表示: names <- c("FRIEDRICH SCHILLER", "FRANK O'HARA", "HANS-CHRISTIAN ANDERSEN")
我想呈现一个表单小部件。这是我要生成的原始 HTML: 使用这个: {{ form_row(form.email, { 'type' : 'email', 'attr' : { 'class' :
我正在开发一个 python 项目,它使用 pythonnet 和几个 C# dll 作为依赖项。 由于我不想将 dll 推送到 git 存储库,因此我调整了 .gitignore 文件。但是,现在
考虑到上午/下午,我想将字符串转换为 php 数据时间。 我想将 '03/06/2015 12:17 am' 转换为 php datatime。 我试过了, $myDateTime = DateTim
我想排除那些具有相同标题和同一年份的实例。 title votes ranking year 0 Wonderland 19 7.9 1931 1
例如对于一个 EditText,通常指定 android:inputType="numberDecimal"用于文本字段应该包含十进制数。但这假设“。”用作小数点分隔符,在某些国家/地区使用“,”代替
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improv
作为练习,我决定学习 Java 中的 lambda 表达式。我想重写我发现笨拙且冗长的旧代码。它检查命令行参数是否是(1)文件路径或(2)目录路径。在(1)场景中,它将命令行参数传递给方法。在 (2)
我是一名优秀的程序员,十分优秀!