Шаблон в Spring для динамического добавления Keyspace к таблицам?

В Spring Data — Cassandra (SDC) я хочу повторно использовать один и тот же сеанс драйвера DataStax, но получить доступ к разным пространствам ключей в зависимости от того, какой арендатор (в многопользовательской модели SaaS) обращается к Cassandra в данный момент. Тем не менее, согласно моему исследованию, добавление пространства ключей для создания полностью квалифицированных запросов является предпочтительным способом достижения этой цели.

Есть ли у SDC хуки для этого? Я ищу что-то похожее на поддержку нескольких арендаторов Hibernate. В Hibernate он может повторно использовать один и тот же пул соединений. Приложение предоставляет способ сообщить Hibernate, какой арендатор находится в текущем контексте, и может контролировать, как подключается сеанс Hibernate — возможно, другую схему для каждого арендатора, вызывая «SET SCHEMA 'foo_tenant_schema'» в соединении JDBC или что-то в этом роде.

Если нет, то мне нужно написать это самому. Это нормально. Я думаю, что загрузил бы карту «tenantID-to-keyspace» и каким-то образом динамически добавил ее, чтобы сделать полноценный вызов. Я не уверен, как это повлияет на PreparedStatements сеанса DataStax и т. д.

Если есть мысли как лучше, расскажите.


person Jason    schedule 21.05.2015    source источник


Ответы (1)


Вы определенно можете сделать то, что делаете, другой вариант - выполнить следующее перед выполнением фактического запроса.

cassandraTemplate.execute("use " + keySpaceName + ";");

Вы также можете комбинировать приведенный выше запрос с вашим фактическим запросом в пакетном режиме. Таким образом, вам не нужно ничего добавлять в существующий запрос. Здесь предполагается, что все пространства ключей находятся в одном кластере.

person Harvinder Singh    schedule 20.07.2015