在cassandra中创建自定义分区器,将记录索引到特定节点

在cassandra中创建自定义分区器,将记录索引到特定节点,cassandra,Cassandra,目前我使用的是一个具有多个节点的Cassandra群集 场景:在插入记录时,我需要确保将特定行插入到指定的节点。我可以通过创建自定义分区来处理这个问题吗?或者有没有人可以处理这些事情 这是因为在向集群添加新节点时,如果出现溢出或数据过多,所有即将进行的插入都应该在新节点中完成。所以我需要上面的场景才能工作。这对卡桑德拉有可能吗 提前谢谢。您不想这样做。这是一个非常糟糕的主意 其效果是,新节点将被完全敲打,而所有旧节点将什么也不做。您的性能将受到新节点性能的限制。其次,除非复制因子为1,否则新行将

目前我使用的是一个具有多个节点的Cassandra群集

场景:在插入记录时,我需要确保将特定行插入到指定的节点。我可以通过创建自定义分区来处理这个问题吗?或者有没有人可以处理这些事情

这是因为在向集群添加新节点时,如果出现溢出或数据过多,所有即将进行的插入都应该在新节点中完成。所以我需要上面的场景才能工作。这对卡桑德拉有可能吗


提前谢谢。

您不想这样做。这是一个非常糟糕的主意

其效果是,新节点将被完全敲打,而所有旧节点将什么也不做。您的性能将受到新节点性能的限制。其次,除非复制因子为1,否则新行将写入多个节点—这就是您想要的


我建议您多阅读一些datastax.com上的Cassandra文档。

您不想这样做。这是一个非常糟糕的主意

其效果是,新节点将被完全敲打,而所有旧节点将什么也不做。您的性能将受到新节点性能的限制。其次,除非复制因子为1,否则新行将写入多个节点—这就是您想要的


我建议您多阅读一些datastax.com上的Cassandra文档。

很抱歉告诉您,但在我看来,您的解决方案是您对Cassandra所能做的最糟糕的事情

但值得庆幸的是,Cassandra1.2引入了VNodes

这将使在集群中插入一个新节点以更快地释放全局负载,而无需敲打新节点。请记住,新节点除了在启动时进行写入和读取之外,还有很多事情要做。您只需在使用vnode的令牌环的初始设置上保持明智,以加快新闻节点的插入

您的方法与使用手动分片MySQL服务器的公司的做法非常相似。手动切分是使用Cassandra等系统试图解决的主要问题

我曾见过两例卡桑德拉无法应付负载的情况:

整个集群都超载了,在这种情况下,引入新节点是唯一的出路。在这种情况下,Vnode是您的朋友。这主要是因为您低估了应用程序的负载。让集群更大或实例更大,这是您的选择

集群中有一个节点受到了特别的打击:这表明你的应用程序正在做一些非常错误的事情,即写入一个或几个硬编码密钥。这将使该键的所有读写操作落在一个节点上,并使其过载,直到崩溃,集群的其余部分将尝试承担该键的负载。最坏的情况是所有操作都失败,最好的情况是性能大幅下降。 解决方案是将硬编码密钥存储到足够多的子密钥中,这样您就可以确保它们会落在整个集群中。我建议生成它们的散列,并使用nodetools检查它们落在哪里。 最后一种情况是sysops解决方案无法解决的,必须通过返回正在敲打该键的应用程序代码来修复


顺便说一句,最后一种情况正是您将要实现的解决方案的结果。单个cassandra实例的大小与它的内存wize一样好,它们并不是无敌的。cassandra集群在没有单点故障(如果使用正确的话)方面令人惊讶,这就是为什么cassandra可以用于处理巨大的工作负载。不要自己插入单一故障点。

很抱歉告诉您,但在我看来,您的解决方案是您对卡桑德拉所能做的最糟糕的事情

但值得庆幸的是,Cassandra1.2引入了VNodes

这将使在集群中插入一个新节点以更快地释放全局负载,而无需敲打新节点。请记住,新节点除了在启动时进行写入和读取之外,还有很多事情要做。您只需在使用vnode的令牌环的初始设置上保持明智,以加快新闻节点的插入

您的方法与使用手动分片MySQL服务器的公司的做法非常相似。手动切分是使用Cassandra等系统试图解决的主要问题

我曾见过两例卡桑德拉无法应付负载的情况:

整个集群都超载了,在这种情况下,引入新节点是唯一的出路。在这种情况下,Vnode是您的朋友。这主要是因为您低估了应用程序的负载。让集群更大或实例更大,这是您的选择

集群中有一个节点受到了特别的打击:这表明你的应用程序做错了什么, 正在写入一个或几个硬编码密钥。这将使该键的所有读写操作落在一个节点上,并使其过载,直到崩溃,集群的其余部分将尝试承担该键的负载。最坏的情况是所有操作都失败,最好的情况是性能大幅下降。 解决方案是将硬编码密钥存储到足够多的子密钥中,这样您就可以确保它们会落在整个集群中。我建议生成它们的散列,并使用nodetools检查它们落在哪里。 最后一种情况是sysops解决方案无法解决的,必须通过返回正在敲打该键的应用程序代码来修复


顺便说一句,最后一种情况正是您将要实现的解决方案的结果。单个cassandra实例的大小与它的内存wize一样好,它们并不是无敌的。cassandra集群在没有单点故障(如果使用正确的话)方面令人惊讶,这就是为什么cassandra可以用于处理巨大的工作负载。不要自己插入单一故障点。

是的,您可以,通过提供org.apache.cassandra.dht.IPartitioner的实现,并在partitioner:字段上引用conf/cassandra.yaml中的类名。

是的,您可以,通过提供org.apache.cassandra.dht.IPartitioner的实现,并在partitioner:字段上引用conf/cassandra.yaml中的类名