Как создать пул соединений в Cloud Spanner для корпоративных приложений - PullRequest
0 голосов
/ 30 декабря 2018

Я довольно новичок в Cloud Spanenr.Я понял, как создать соединение (dbClient) и использовать его для транзакций и выполнения других запросов / мутаций.Но я не совсем понимаю, как создать ConnectionPooling для Cloud Spanner, а есть SpannerOptions, Session / SessionPoolOptions.Простое создание

 SpannerOptions options = SpannerOptions.newBuilder().build();
          Spanner spanner = options.getService();
DatabaseClient dbClient = spanner.getDatabaseClient(db);

будет обрабатывать ConnectionPooling, необходимый для корпоративных приложений.

Существует ли правильный способ создания пула соединений в стиле JDBC / Hibernate, если мы принимаем объект соединения в виде пула ивернитесь в пул для повторного использования, вместо того, чтобы создавать соединения несколько раз.

Я сделал создание объекта соединения и создал все транзакции типа с запросами и мутациями и другим процессом.Я нахожусь на уровне создания централизованной библиотеки для проверки соединения (dbClient) для нескольких дао.Невозможно получить надлежащую документацию или процесс для достижения стиля JDBC / Hibernate класса пула соединений для Cloud Spanner

 SpannerOptions options = SpannerOptions.newBuilder().build();
          Spanner spanner = options.getService();
            try {
              DatabaseId db = DatabaseId.of(options.getProjectId(),SpannerInstanceId, SpannerDatabaseId);

              String clientProject = spanner.getOptions().getProjectId();
              if (!db.getInstanceId().getProject().equals(clientProject)) {
                System.err.println(
                    "Invalid project specified. Project in the database id should match"
                        + "the project name set in the environment variable GCLOUD_PROJECT. Expected: "
                        + clientProject);
              }
              DatabaseClient dbClient = spanner.getDatabaseClient(db);
              dbClient
              .readWriteTransaction()
              .run(
                  new TransactionCallable<Void>() {
                    @Override
                    public Void run(TransactionContext transaction) throws Exception {
                        ResultSet resultSet;

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

1 Ответ

0 голосов
/ 02 января 2019

В Cloud Spanner долгоживущее «соединение» / «канал связи» с базой данных моделируется « сеансом », а не объектом DatabaseClient.Объект DatabaseClient уже реализует пул подключений (сеансов) внутри объекта SessionPool, который можно настроить с помощью SessionPoolOptions.

Если вы хотите управлять своими собственными сеансами, вместо того, чтобы давать объект DatabaseClient (или класс, обертывающий его) для каждого из ваших объектов DAO, вы можете инициализировать свой собственный SessionPool и дать им каждыйSession объект (или класс, обертывающий его).

...