Astyanax не может прочитать некоторые семейства столбцов - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь перечислить семейства столбцов в Кассандре, используя драйвер Astyanax.Он перечисляет пространства ключей ОК, но многие семейства столбцов отсутствуют в выводе.

У меня есть простая программа для этого:

import com.netflix.astyanax.AstyanaxContext;
import com.netflix.astyanax.Cluster;
import com.netflix.astyanax.connectionpool.impl.ConnectionPoolConfigurationImpl;
import com.netflix.astyanax.connectionpool.impl.CountingConnectionPoolMonitor;
import com.netflix.astyanax.ddl.ColumnFamilyDefinition;
import com.netflix.astyanax.ddl.KeyspaceDefinition;
import com.netflix.astyanax.impl.AstyanaxConfigurationImpl;
import com.netflix.astyanax.thrift.ThriftFamilyFactory;

public class App {

  public static void main(String[] args) throws Exception {

    ConnectionPoolConfigurationImpl cpool = new ConnectionPoolConfigurationImpl("ConnectionPool")
        .setPort(9160)
        .setSeeds("localhost");

    AstyanaxConfigurationImpl astyanaxConfiguration = new AstyanaxConfigurationImpl();
    AstyanaxContext.Builder ctxBuilder = new AstyanaxContext.Builder();
    ctxBuilder.forCluster("Cluster")
        .withAstyanaxConfiguration(astyanaxConfiguration)
        .withConnectionPoolConfiguration(cpool)
        .withConnectionPoolMonitor(new CountingConnectionPoolMonitor());

    AstyanaxContext<Cluster> clusterContext = ctxBuilder.buildCluster(ThriftFamilyFactory.getInstance());
    clusterContext.start();
    Cluster cluster = clusterContext.getClient();

    for (KeyspaceDefinition ksDef : cluster.describeKeyspaces()) {
      List<ColumnFamilyDefinition> cfDefList = ksDef.getColumnFamilyList();
      System.out.println("there are " + cfDefList.size() + " column families in keyspace " + ksDef.getName());
      for (ColumnFamilyDefinition cfDef : cfDefList) System.out.println(" - " + cfDef.getName());
    }

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

there are 0 column families in keyspace system_distributed
there are 3 column families in keyspace system
- hints
- schema_keyspaces
- IndexInfo
there are 2 column families in keyspace system_auth
- role_members
- resource_role_permissons_index
there are 0 column families in keyspace system_traces

Я могу использовать cqlsh, чтобы подтвердить, что семейства столбцов действительно существуют

cqlsh> DESCRIBE COLUMNFAMILIES

Keyspace system_traces
----------------------
events  sessions

Keyspace system_auth
--------------------
resource_role_permissons_index  role_permissions  role_members  roles

Keyspace system
---------------
available_ranges  size_estimates    schema_usertypes    compactions_in_progress
range_xfers       peers             paxos               schema_aggregates
schema_keyspaces  schema_triggers   batchlog            schema_columnfamilies
schema_columns    sstable_activity  schema_functions    local
"IndexInfo"       peer_events       compaction_history  hints

Keyspace system_distributed
---------------------------
repair_history  parent_repair_history

Вывод выше использует cassandra 2.2, но я должен подтвердить поведение в других версиях cassandra и scylla.

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Я помню, что использовал Astyanax с Cassandra 0.8.8 - 1.1 и 1.2.Было время, когда мы помещали все данные (столбцы) в один раздел в виде большого двоичного объекта (включили более быструю запись), а затем мы анализировали данные из экономичного толстого клиента (предположительно, в это время Кассандра медлила чтение).Нам нужно было отслеживать схему, а затем при десериализации вывода из экономичного клиента мы будем анализировать на основе типа данных всех отдельных столбцов.Все это изменилось после введения CQL, и, как указывает Крис, это рекомендуемый способ работы с c *.

.
0 голосов
/ 12 октября 2018

С какими версиями Scylla вы пробовали?Thrift, хотя и не рекомендуется с Cassandra, все еще поддерживается в Scylla.

0 голосов
/ 03 октября 2018

Thrift устарела и больше не включена Кассандрой по умолчанию.Вы должны были бы включить это, чтобы использовать это.Имейте в виду, что в следующих версиях Cassandra он даже не существует.Весьма вероятно, что даже включение и использование этого может не работать должным образом.Ничто действительно не использует это больше, и есть не так много тестов, которые используют это.То, как таблицы хранятся и извлекаются, изменяется между версиями, поэтому драйвер должен знать об этом.Так как Astyanax не поддерживается, он, скорее всего, не будет правильно.

Astyanax был удален и доступен только для старых приложений.Вы действительно должны использовать Java-драйвер (та же рекомендация, что и на странице Astyanax).

...