Multi-Keyspace с Java-драйвером Cassandra на лету

В настоящее время мы используем драйвер Java Cassandra для настройки сеанса на основе атрибутов, определенных в файле свойств, который выглядит следующим образом:

Cluster cluster = Cluster.builder()
            .addContactPoints(contactPoints)
            .withPort(environment.getRequiredProperty("cassandra.port", Integer.class))
            .withCredentials(username, password)
            .build();

Session session = cluster.connect(environment.getRequiredProperty("cassandra.keyspace"));

Чего мы хотим достичь сейчас, так это использовать многоключевое пространство на лету, если есть способ сделать это, имея возможность обнаруживать соединение cassandra для данного запроса без особых изменений в существующей логике, кроме конфигурации. Любое предложение или помощь по этому поводу было бы отличным способом начать


person Manish Karki    schedule 13.08.2018    source источник


Ответы (1)


Лучший способ добиться этого — указать таблицу как keyspace.table во всех запросах и не полагаться на пространство ключей, установленное в сеансе. Конечно, вы можете иметь несколько объектов сеанса — по одному на пространство ключей, но это не рекомендуется, так как каждый сеанс довольно тяжелый, и открывать как минимум 2 соединения с каждым узлом в кластере.

Последние версии драйвера Java поддерживают настройку пространства ключей с помощью setKeyspaceфункции класса SimpleStatement, но он также требует поддержки на стороне Cassandra (не помню, какая версия, хотя, по крайней мере, DSE 6.0 поддерживает это).

(Обновление): настройка пространства ключей на уровне запроса не объединена с драйвером OSS Java, а доступно только в драйвере DSE Java.

person Alex Ott    schedule 13.08.2018