我有一个结构化的行作为输入,写入速率为每秒10K。每行有20列。应该对这些输入回答一些查询。由于大多数查询需要不同的WHERE
,GROUP BY
或ORDER BY
,因此最终的数据模型最终如下:
primary key for table of query1 : ((column1,column2),column3,column4)
primary key for table of query2 : ((column3,column4),column2,column1)
and so on
我知道Cassandra数据模型中表的数量限制(200表示警告,500表示失败)
因为对于每个输入行,我应该在每个表中进行插入,每秒的最终写入变得很大*大数据!:
writes per seconds = 10K (input)
* number of tables (queries)
* replication factor
主要问题:我是走在正确的道路上吗?即使输入速率已经很高,为每个查询设置一个表是否正常?
我不应该使用像spark或hadoop这样的东西而不是依靠裸数据模型吗?或者事件Hbase而不是Cassandra?
答案 0 :(得分:0)
Elassandra可能会解决您的问题。
查询系统与CQL完全不同,但是索引的重复将由后端的Elassandra自动管理。一个表的所有列都将建立索引,因此Elassandra的Elasticsearch部分可与query anything you'd like的REST API一起使用。
在我的一项测试中,我将大量数据不停地推入Elassandra数据库(8Gb),并且从未超时。而且搜索引擎几乎一直保持就绪状态。或多或少您在说什么。文档说,新添加的数据在Elassandra索引中可用需要5到10秒。我想这在某种程度上取决于您的安装,但是对于大多数应用程序来说,这已经足够了。
使用Elassandra乍一看可能有点毛茸茸,但是一旦安装到位,就难以置信地发现结果有多快。它肯定包括令人难以置信的(强大的)WHERE
。 GROUP BY
有点难以放置。 ORDER BY
很简单,但是,当(重新)排序时,您会失去速度...需要牢记的一点。不过,在我的测试中,即使是ORDER BY
的等效词也非常快。