你好,stack overflow社区!
我需要一些帮助,找出正确的方法建立连接的帮助下,表达Cassandraorm模型在nodejs为我的多直流电(总直流电=2)Cassandra设置。
我们目前只使用1个dc和express cassandra,因此对于相同的情况,我们只在中提供2个种子节点ip地址作为express cassandra的联系点,如下所示
models.setDirectory(__dirname + '/models').bind(
{
clientOptions: {
contactPoints: cassandraContactPoints,
protocolOptions: { port: 9042 },
keyspace: 'keyspace_name',
queryOptions: { consistency: models.consistencies.one }
},
ormOptions: {
defaultReplicationStrategy: {
class: 'NetworkTopologyStrategy',
replication_factor: 2,
},
createKeyspace: false,
dropTableOnSchemaChange: false
}
},
function (err) {
if (err) {
throw err;
} else {
console.log('connection established');
postDBConnection(models, 'keyspace name again');
}
}
这里需要注意的是,我们将cassandracontactpoints指定为一个仅包含现有dc的2个节点的数组。
由于我们正在使用一个单独的dc进行分析,我想知道我们是否应该在同一个数组中提供新dc的ip地址,即cassandracontactpoints?我们计划使用本地的quoram,并希望我们的分析应用程序在所有读写操作中只使用分析dc。
我试过阅读express cassandra和“cassandra驱动程序”模块的源代码,但我无法找到解决方案>
任何帮助都将不胜感激!
1条答案
按热度按时间6qqygrtg1#
从另一个dc提供联系点从来都不是一个好主意-大多数驱动程序(不记得about node.js driver)都在执行联系点的洗牌,因此它可能会首先联系另一个dc中的节点,并从该节点的信息中提取dc名称,并且会认为该dc是应用程序的本地名称,因此,本地仲裁查询将针对分析dc执行,这将导致问题。
如果显式地为应用程序设置本地的dc name,而不是从接触点隐式地检测它,则可以使代码更加防弹。有关详细信息,请参阅驱动程序文档(在版本4.0中,开发人员必须指定本地dc的名称!)