DCE Cassandra 3.9在加入现有集群期间创建慢速二级索引

时间:2017-04-14 06:33:06

标签: cassandra dce

我们有拥有32个节点的cassandra集群,平均节点大小约为1TB。节点配置1xIntel Xeon E3-1271v3,32GB内存,2x3TB硬盘。 我们有一个带有一些小表和一个大表的数据库,它占总簇大小的90-95%。

我尝试向此群集添加其他节点,但突然发现,向现有群集中添加一个节点大约需要13-14天才能加入群集。构建二级索引需要花费大部分时间,并且所有这些时间我都看到所有压缩程序线程都占用了所有可用的CPU。

我已将cassandra配置更改为扩展限制:

  • concurrent_compactors:4
  • compaction_throughput_mb_per_sec:0

Cassandra full config

Schema

大约1年前,我们还向该集群添加了新节点,并将其从16个节点扩展到32个节点集群,在集群扩展之前,平均节点大小为1TB。 Cassandra版本是2.1。一个节点加入时间为1-1.5天。

那么问题是我们如何才能加快这个过程?我们错过了什么吗?

感谢。

1 个答案:

答案 0 :(得分:0)

这个有点长,所以我无法发表评论......抱歉。

我知道这听起来有点奇怪,特别是对于后期阶段 你的项目,但事情是索引情况不会得到 随着时间的推移会更好我强烈建议你开始制作自己的 表而不是仅仅将索引放在下面的东西上。取决于 访问数据的频率你可以使用"反向索引"。

CREATE INDEX links_by_author_url_idx ON keyspace.links_by_author (url);


CREATE INDEX docs_url_idx ON keyspace.docs (url);


CREATE INDEX om_master_object_id_idx ON keyspace.om (master_object_id);


CREATE INDEX actions_pday_idx ON keyspace.actions (pday);


CREATE INDEX authors_yauid_idx ON keyspace.authors (yauid);

CREATE INDEX authors_login_lr_idx ON keyspace.authors (login_lr);

CREATE INDEX authors_login_idx ON keyspace.authors (login);

CREATE INDEX authors_email_idx ON keyspace.authors (email);

CREATE INDEX authors_name_idx ON keyspace.authors (name);

基本上,您在这里拥有的每个索引都可以让您进行搜索"超过基地 实体在某种条件下找到它们。大多数条件是 实际上相当狭窄,这是一个好消息。但问题是指数 将变得庞大(已经),特别是在文档和作者。但我想 doc更有问题。

您应该考虑为此制作单独的表格。每个指数都是 您创建将在群集中的每个节点上进行创建 你将拥有比你真正需要的更多的数据,因为在 每个节点乘以引擎数据。为此添加复制因子时 系统正在使用大量空间而你甚至没有意识到。

加入节点的问题是,当他们收到所有新数据时 需要为每个节点重建集群中的数据 在集群中,这会花费你很多时间。所以基本上你松了 "简单节点加入的所有好处" cassandra有。

现在您可能认为在写入数据时空间会出现问题 进入非规范化的新架构......

如果空间有问题,您可以使用称为倒排索引的技术 您只需将信息的ID放入搜索表中即可 然后你在主表中进行第二次加载。我在一些项目中使用了这个 空间是问题,但因为你有所有主要的东西索引 空间可能不会成为一个问题,因为你已经使用了很多 比你想象的更多。 (我的赌注是你也可能在空间上节省很多)

无论如何,所有索引都应成为表...如果一致性有问题, 使用批次(不要使用实体化视图,因为您可能会丢失数据)。

我的诚实提示是你远离索引。我知道 很难重构这个加上它很难有时间重构:(但是 我认为这应该是可以管理的。