【发布时间】:2014-01-13 07:38:26
【问题描述】:
我正在使用一个接收 50/s 10kb 写入流的系统,该写入流每天 24 小时运行。数据通过消息系统摄取到 sql 数据库中,然后用于一夜之间的聚合,这需要大约 15 小时才能为应用程序生成可查询的数据。
目前这一切都在 sql 中,但我们正在转向新的架构。
计划是将摄取的写入移动到分布式数据库(如 Cassandra 或 dynamodb)中,然后在 hadoop 中执行聚合。这使得系统的这些部分具有可扩展性。
我的问题是,当人们拥有这种架构时,在执行写入和聚合之后,他们将数据放在哪里以便可以查询。
更详细的:
我们的应用程序使用的查询模型相当复杂,为了使数据在 cassandra 中可查询,我们必须对所有查询进行非规范化处理,这是可能的,但这意味着数据量的巨大增长。这是正常的做法吗?还是您更愿意将数据移回 sql?
我们可以将数据移入 redshift,但这似乎更多用于临时数据分析,其目的不是作为数据分析应用程序的后端。我还认为当前形式的查询过于复杂,无法以 redshift 所需的 orm 形式编写。
这是否意味着我仍然需要将数据放入sql server?
我正在寻找人们目前正在做什么的例子。
对不起,这个问题有点抽象,请不要关闭它,我会补充更多细节。我读过很多关于大数据的文章,但大多数文章都是关于使用消息传递/工作人员和分布式数据库来摄取数据的,但我还没有发现任何文章显示他们如何处理这些摄取的数据以及如何从应用程序中查询这些数据。
*回答 JosefN 的评论: 是的,我们不打算将非规范化到 sql 数据库中。选择是,对所有客户端和查询进行非规范化到 cassandra,这可能意味着当前数据大小的 100 倍,因为在非规范化模型中会有很多重复。另一种选择是按现在的方式存储它,以便它可以查询,但是,我唯一的选择是 sql db 吗?
*经过更多研究,我得到了更多信息。目前最好的选择似乎是:
- 存回sql
- cassandra 中的非规范化
- 在 hadoop / hdfs 上使用实时 sql 引擎之一,例如 impala
- drpc 与风暴
我没有任何使用暴风雨的 Impala 或 DRPC 的经验,所以如果有人有任何关于延迟和可以使用这些执行的查询类型的信息,那就太好了。
请不要参考文档或博客文章,我知道这些技术是如何工作的,我只想知道是否有人在生产中使用过它们并且在这个主题上有自己的信息。谢谢
【问题讨论】:
-
在 SQL db 中存储大的非规范化数据绝对不是一个好主意。可以准备几个针对不同查询优化的查询模型。我不会太担心数据大小。 Cassandara 或 HBase 可以很好地扩展。期待更多规格
标签: cassandra bigdata amazon-dynamodb