2

目前我正在以这种方式启动 ClusterContext:

        AstyanaxContext.Builder builder = new AstyanaxContext.Builder()
            .forCluster(clusterName)
            .forKeyspace(keyspaceName)
            .withAstyanaxConfiguration(getAstyanaxProperties(properties))
            .withConnectionPoolConfiguration(getConnectionPoolProperties(properties))
            .withConnectionPoolMonitor(connectionPoolMonitor);

    clusterContext = builder.buildCluster(ThriftFamilyFactory.getInstance());
    clusterContext.start();
    cluster = clusterContext.getEntity();

在单节点开发环境中运行。我正在使用 ClusterContext,因为我还想创建一个键空间、列族等。

我是否还需要启动 KeyspaceContext?如果是这样,出于什么目的,或者单个 ClusterContext 足以用于键空间/列族管理和读/写场景?

如果我确实启动了 KeyspaceContext,我会看到,根据连接池监视器,添加了 2 个主机并处于活动状态。如果我关闭单个 Cassandra 节点,我仍然会看到 1 标记为活动,这令人困惑。

谢谢。

4

1 回答 1

1

查看 netflix 的创建keyspace 的文档。它表明您使用该Keyspace对象创建键空间。页面下方还有关于创建列族的详细信息。

你用你初始化一个AstyanaxContext然后用来获取你的Keyspace对象。

AstyanaxContext<Keyspace> ctx = new AstyanaxContext.Builder()
    .forKeyspace("MyKeyspace")
    // Additional configuration parameters
    .buildKeyspace(ThriftFamilyFactory.getInstance());
ctx.start();
Keyspace keyspace = ctx.getClient();

然后您可以创建一个键空间(如下)。请注意,您在函数中指定的键空间是否forKeyspace(...)尚未创建并不重要。

// Using simple strategy
keyspace.createKeyspace(ImmutableMap.<String, Object>builder()
    .put("strategy_options", ImmutableMap.<String, Object>builder()
        .put("replication_factor", "1")
        .build())
    .put("strategy_class",     "SimpleStrategy")
        .build()
     );

您现在可以使用和重用它Keyspace来执行任意数量的插入/删除/键空间和列族创建。

于 2013-06-20T08:11:37.933 回答