Astyanax ClusterContext и/или KeyspaceContext?

в настоящее время я запускаю 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, помеченный как активный, что сбивает с толку.

Спасибо.


person tsteinmaurer    schedule 20.06.2013    source источник


Ответы (1)


Взгляните на документацию netflix для создания ключевое пространство. Это показывает, что вы создаете пространства ключей, используя объект 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, чтобы выполнять столько операций вставки/удаления/ключевого пространства и создания семейств столбцов, сколько пожелаете.

person Lyuben Todorov    schedule 20.06.2013
comment
В чем тогда разница с ClusterContext? - person tsteinmaurer; 27.06.2013
comment
Do I additionally also need to start up a KeyspaceContext? Ну... если вы хотите использовать ClusterContext и хотите запросить базу данных, да, вы будете... разница в том, что можно выполнять запросы. Также я не нашел ClusterContext нигде в инструкциях по использованию на вики Astyanax, поэтому явно лучше использовать AstyanaxContext. Не удалось найти его в документации, поэтому я не уверен, почему вы используете ClusterContext. - person Lyuben Todorov; 27.06.2013