Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra群集密钥使用_Cassandra_Akka Cluster_Compound Key_Cassandra 2.1_Clustering Key - Fatal编程技术网

Cassandra群集密钥使用

Cassandra群集密钥使用,cassandra,akka-cluster,compound-key,cassandra-2.1,clustering-key,Cassandra,Akka Cluster,Compound Key,Cassandra 2.1,Clustering Key,我对此感到很头痛,但坦率地说,我的大脑不会明白——至少看起来是这样 我有一个专栏家庭,为一大群演员工作。它是一个中央作业管理和调度表,必须在整个集群中分布和可用,甚至可能在不久的将来跨越数据中心的障碍 每个job executor actor系统,即实际执行作业的系统,都安装在一个Cassandra节点旁边,也就是说,安装在同一个节点上。事实上,当然有一个主要的演员负责把工作分配给演员代理,但这与我的问题无关 还有一些actor系统可以在中心作业表中创建作业,由其他actor甚至actor系统执

我对此感到很头痛,但坦率地说,我的大脑不会明白——至少看起来是这样

我有一个专栏家庭,为一大群演员工作。它是一个中央作业管理和调度表,必须在整个集群中分布和可用,甚至可能在不久的将来跨越数据中心的障碍

每个job executor actor系统,即实际执行作业的系统,都安装在一个Cassandra节点旁边,也就是说,安装在同一个节点上。事实上,当然有一个主要的演员负责把工作分配给演员代理,但这与我的问题无关

还有一些actor系统可以在中心作业表中创建作业,由其他actor甚至actor系统执行,但这些作业通常以批处理方式或通过web界面手动加载

执行作业的参与者始终只查询其本地cassandra节点。如果完成,它将更新作业表以指示其已完成。在正常情况下,此写入操作还应仅更新作业记录,而他的本地Cassandra节点对此具有权威性

现在,有时可能会发生给定主机上的参与者系统与此无关的情况。在这种情况下,它确实也应该从其他节点获取作业,但当然它仍然只会与它的本地Cassandra节点通信。我知道这很有效,我一点也不担心

让我晚上睡不着的是:

我如何创建一个复合键来实现Cassandra节点对其本地参与者系统的作业条目的本地权威性,从而实现其作业执行参与者,而无需将作业表拆分为多个列族等

换句话说:我如何创建一个复合键来确保a)作业在集群中均匀分布,以及 b) 作业表上的本地查询仅返回此Cassandra节点具有权威性且 c) 我的分布式代理系统仍然可以从其他节点获取作业,以防它没有自己的作业要执行

以上c)的最后一句话。我不想在没有本地工作的情况下做2个查询,但仍然只在上

有什么提示吗

这是迄今为止作业表的一般结构:

ClusterKey    UUID: Primary Key
JobScope    String: HOST / GLOBAL / SERVICE / CHANNEL
JobIdentifier    String: Web-Crawler, Twitter
Description    String: 
URL    String:
JobType    String: FETCH / CLEAN / PARSE /
Job    String: Definition of the job
AdditionalData    Collection: 
JobStatus      String: NEW / WORKING / FINISHED 
User    String: 
ValidFrom    Timestamp: 
ValidUntill    Collection: 
仍在设置所有内容的过程中,因此尚未定义任何查询。但是参与者会从中取出作业并设置状态,因此卡桑德拉无法将密钥“固定”到节点上,如果你想要的是这样的话

如果我是你,我就不再担心我的本地节点是否对某些数据集具有权威性,而是开始利用Cassandra中的内置一致性控件来管理您从中读取或写入的节点集

这里有很多关于读一致性和写一致性的信息—使用正确的一致性将确保应用程序在保持逻辑正确的同时具有良好的可扩展性:

另一项值得一提的是原子“比较和交换”,也称为轻量级事务。假设您希望确保给定的作业只执行一次。您可以添加一个字段,指示作业是否已“拾取”,然后查询该字段(
,其中拾取=0
),同时(原子地)更新该字段,以指示您正在“拾取”该工作。这样其他演员就不会再接下去了


关于轻量级事务的信息:

您能用您的模式(
创建表
)和查询语句编辑您的问题吗?这将使你更容易看到你在做什么。