卡桑德拉vs弹性搜索vs其他任何设计建议

时间:2019-05-30 21:06:44

标签: elasticsearch cassandra amazon-dynamodb relational-database

我们需要对rds中存储的数据进行分析查询。而且由于按查询分组以及表的大小不断增加,这变得非常非常缓慢。 例如,我们在RDS中有以下3个表:

alm(id,name,cli, group_id, con_id ...)
group(id, type,timestamp ...)
con(id,ip,port ...)

每个表中的数据量都很高,并且随着新数据的输入每分钟要更新几次。

现在我们要运行聚合查询,例如:

select name from alm, group, con where alm.group_id=group.id and alm.con_id=con.id group by name, group.type, con.ip

我们还希望用户将来运行自定义聚合查询,而不是将来由我们提供的修订查询。

到目前为止,我们正在考虑的选项正在转移到Cassandra,Elasticsearch或Dynamo db,以便聚合会更快。有人可以指导如何解决这个问题吗?还是有经验的面包屑?有人知道任何技术都比其他技术具有明显优势吗?

3 个答案:

答案 0 :(得分:0)

Cassandra和DynamoDB与ElasticSearch完全不同。而且这三者与关系数据库产品都大不相同。

对于临时分析,具有精心设计的架构的关系数据库可以很好地满足您需要在多台服务器之间拆分数据的需求(然后,复制问题开始占据优势)。这确实是非关系数据库的主要动机。但是要注意的是,为了解决水平缩放问题,它们通常会交换某些功能,例如连接和聚合。

弹性搜索确实很擅长回答搜索查询,但不是特别擅长汇总(除了非常基本的计数,总和及其估计值以外)。它 索引大量数据令人惊讶,但它不能回答涉及多个索引的查询。

如果您有大量数据并且需要聚合,则几乎有两个选择:

  1. 如果您可以摆脱离线分析,那么分布式数据处理框架(例如Spark)可以非常有效地为您提供所需的答案

  2. 如果您需要在线分析,最常用的方法是预先计算汇总并在获取更多数据时进行更新,从而可以非常快速地查询查询,而不必为每个查询处理大量数据查询

不要害怕混搭。关系数据库的目的与非关系数据库一样。虽然没有灵丹妙药。

答案 1 :(得分:0)

还有一个选择是Column-oriented databases,当您有许多数据字段并且想要执行聚合或提取大量数据的某些字段子集时,这种DB更适合“分析”情况。 / p>

最近Yandex ClickHouse变得非常流行,并且Amazon提供了面向列的服务-Redshift。另外还有其他几个solutions

答案 2 :(得分:0)

存放在实木复合地板中并使用火花,有效地进行分区