我正在使用一个系统,该系统接收每天24小时运行的50 / s 10kb写入流。数据通过消息系统被摄取到sql数据库中,然后用于隔夜聚合,大约需要15个小时来为应用程序生成可查询数据。
目前所有这些都在sql中,但我们正在转向新架构。
计划是将摄取的写入移动到像Cassandra或dynamodb这样的分布式数据库,然后在hadoop中执行聚合。这使得系统的这些部分可以扩展。
我的问题是,当人们拥有这种架构时,他们在执行写入和聚合之后将数据放在何处,以便可以查询。
更详细:
我们的应用程序使用的查询模型非常复杂,为了使数据在cassandra中可查询,我们必须对所有查询进行非规范化,这是可能的,但这意味着数据大小的大量增长。这是正常做法吗?或者您更愿意将数据移回sql?
我们可以将数据移入红移,但这似乎更适合于临时数据分析,其目的不是成为数据分析应用程序的后端。我还认为这些查询在当前形式中过于复杂,无法写入redmift所需的orm中。
这是否意味着我仍然需要将数据放入sql server?
我正在寻找人们目前正在做什么的例子。
对不起这个问题有点抽象,请不要关闭它,我会添加更多细节。我已经阅读了大量数据,但大多数文章都是关于使用消息传递/工作人员和分布式数据库来获取数据,但我没有发现任何显示他们对这些摄取数据的处理以及如何从应用程序查询数据。
* 回答JosefN的评论:是的,我们不打算对sql db进行非规范化处理。对于所有客户端和查询,选择是对cassandra进行非规范化,这可能意味着当前数据大小的100倍,因为在非规范化模型中会有如此多的重复。另一种选择是将它存储为现在,以便它是可查询的,但是,那么,我唯一的选择是sql db吗?
* 经过更多研究后我得到了更多信息。目前最好的选择似乎是:
我对Impala或DRPC没有暴风雨的经验,所以如果有任何关于延迟的信息和可以用这些执行的查询类型那将是很好的。
请不要参考文档或博客文章,我知道这些技术是如何工作的,我只想知道是否有人在生产中使用它们并且有关于这个主题的自己的信息。感谢
答案 0 :(得分:0)
我建议将汇总数据移到HDFS中。使用Hive,它提供了存储在HDFS中的数据的关系视图,你可以很好地使用adhoc sql之类的查询。与此同时,您将受益于使用Hive时调用的MapReduce作业的并行性。这将帮助您减少使用RDBMS时的查询延迟。还要考虑在Hadoop中进行聚合作业。
答案 1 :(得分:0)
由于聚合后的数据很小,并且您正在寻找良好的延迟,将其保留在hdfs中并使用配置单元进行查询是不可取的。 我见过有人使用hbase来存储聚合数据并对其进行查询,但正如您之前提到的那样,您必须对数据进行非规范化。对于这种情况,我建议将聚合数据写回mysql,如果聚合数据不大则在那里查询。
答案 2 :(得分:0)
我认为一种传统方法是运行您的Hadoop / Hive作业以跨所有可能的维度聚合,然后存储在HBase等键/值存储中,并使用基于聚合完成的键查找运行时(即./ state = NJ / dt = 20131225 /)这可能会导致尺寸爆炸,特别是如果要卷起许多尺寸
如果您想要/需要更实时的解决方案,请查看Twitter的summingbird。