Оптимальные настройки для драйвера Java Cassandra для записи только в локальный центр обработки данных

Недавно я начал использовать драйвер Datastax Java для нашего случая использования Cassandra... Мы будем использовать драйвер Datastax Java для чтения/записи в Cassandra...

Я успешно смогу создать соединение Cassandra с помощью драйвера Datastax Java... Но мне интересно, существуют ли какие-либо другие настройки, которые я должен использовать в рабочей среде, чтобы получить лучшую производительность с использованием драйвера Java Datastax при подключении к Cassandra?

/**
 * Creating Cassandra connection using Datastax driver
 *
 */
private DatastaxConnection() {

    try{
        builder = Cluster.builder();
        builder.addContactPoint("some-node");

        // Can anybody explain me what does below piece of code do?

        builder.poolingOptions().setCoreConnectionsPerHost(
                HostDistance.LOCAL,
                builder.poolingOptions().getMaxConnectionsPerHost(HostDistance.LOCAL));

        // And also what does below piece of code is doing?       
        cluster = builder
                .withRetryPolicy(DowngradingConsistencyRetryPolicy.INSTANCE)
                .withReconnectionPolicy(new ConstantReconnectionPolicy(100L))
                .build();

        StringBuilder s = new StringBuilder();
        Set<Host> allHosts = cluster.getMetadata().getAllHosts();
        for (Host h : allHosts) {
            s.append("[");
            s.append(h.getDatacenter());
            s.append("-");
            s.append(h.getRack());
            s.append("-");
            s.append(h.getAddress());
            s.append("]");
        }
        System.out.println("Cassandra Cluster: " + s.toString());

        session = cluster.connect("testdatastaxks");
    } catch (NoHostAvailableException e) {

    } catch (Exception e) {

    }
}

Мои главные приоритеты: -

  • Отфильтруйте базу узлов Cassandra в локальном центре данных. Поэтому в пуле соединений он будет иметь только локальные узлы Cassandra центра обработки данных.
  • И получите максимальную производительность при использовании драйвера Java Datastax с некоторыми определенными настройками.

Я знаю, что возможно, что определенные настройки будут отличаться в разных средах, но могут быть некоторые настройки, которые каждый должен соблюдать, чтобы получить оптимальную производительность при подключении Cassandra с помощью драйвера Datastax Java.

Как и в примере в Astyanax, когда я использовал ранее, вам нужно было использовать TOKEN_AWARE...

Значит, должны быть какие-то наилучшие настройки или рекомендованы при использовании драйвера Java Datastax?

Ответ 1

Отфильтруйте базу узлов Cassandra в локальном центре данных. Поэтому в пуле соединений он будет иметь только локальные центры данных Cassandra

Затем вам нужно использовать DCAwareRoundRobinPolicy.

Как и в примере в Astyanax, когда я использовал ранее, вам нужно было использовать TOKEN_AWARE...

Это справедливо и для драйвера Java DataStax, он называется TokenAwarePolicy и может использоваться поверх приведенной выше DCAwareRoundRobinPolicy.

Я знаю, что возможно, что определенные настройки будут отличаться в разных средах, но могут быть некоторые настройки, которые каждый должен соблюдать, чтобы получить оптимальную производительность при подключении Cassandra с помощью драйвера Datastax Java.

Я не могу говорить "все", но за пределами правильного выбора политики балансировки нагрузки, как описано выше, остальное будет, скорее всего, зависимым от окружающей среды. Но, конечно, если вы заботитесь о производительности, неплохо поиграть с различными настройками Configuration и некоторой реалистичной рабочей нагрузкой и посмотреть, что-то помогает.

Ответ 2

Свойства могут использоваться для ограничения имен хостов, которые вы хотите использовать Драйвер.

cassandra.loadbalancing.whitelistpolicy.hostnames