2016-08-16 69 views
1

我已经卡桑德拉上亚马逊EC2具有3节点(实例)在配置。现在我想要做的是通过在单个群集中创建单独的keyspace,为我的客户在Cassandra上留出一些空间。客户数量将会日益增加,因此我们可以假设创建的密钥空间没有固定的数量。在卡桑德拉有多个密钥空间是不是很好的做法?

如果我在单个群集中创建太多密钥空间,会有性能问题吗?

如果这不是很好的做法,那么有没有其他解决方法可以满足我的需求?我不想配置Cassandra的多个实例。

回答

0

这取决于。取决于你最终想要拥有多少客户(例如,我们谈论的是数百还是数千?),每个密钥空间中有多少个表以及它们是如何使用的。更多密钥空间x更多的表=更多的memtables保存在内存中。不同的cassandra版本的表开销也不同。如果它只是一个标准的“多租户”,那么您可能会考虑将tenant_id列添加到分区键。

也请看similar posts询问表数。

+0

会有成千上万的客户。我不确定桌子的数量。解决我的需求的最佳方法是什么? –

+0

以及每个用户将保留多少数据?非常大的东西? – mmatloka

+0

是的,这将是巨大的。 –

1

少数单独的密钥空间很好,但使用大量密钥空间会导致性能问题。问题不在于密钥空间,而是在每个密钥空间中复制大量表。 Cassandra需要每个表的开销,例如保留1 MB的堆。好的建议是不要超过几百张桌子。

Cassandra中的数千张表将如何执行?有开放的错误报告,表明有成千上万的大量表可能会导致高CPU利用率CASSANDRA-10588和更长的启动时间CASSANDRA-794

BlackRock的Randy Fraden在2015年卡桑德拉峰会上发表了精彩演讲,内容涉及Multi-Tenancy in Cassandra at BlackRock。如上所述,通常的多租户建议是将tenant_id放入分区键中。然后,BlackRock使用定制的IAuthenticator和IAuthorizer模块在分区级执行租户安全性。

对于那些需要多个键空间中的相同表的情况,有一个功能请求允许模板表CASSANDRA-7662,它将添加一些语法糖来缓解创建类似表的任务。