猿问

Astyanax 无法读取某些列族

我正在尝试使用 Astyanax 驱动程序在 Cassandra 中列出列族。它列出了键空间,但输出中缺少许多列族。


我有一个简单的程序:


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());

    }


上面的输出使用的是 cassandra 2.2,但我已经确认了其他版本的 cassandra 和 scylla 中的行为。


一只萌萌小番薯
浏览 150回答 3
3回答

繁花不似锦

Thrift 已弃用,默认情况下不再由 Cassandra 启用。您需要启用它才能使用它。请记住,在 Cassandra 的下一个版本中,它甚至不存在。很可能即使启用它并使用它,事情也可能无法正常工作。没有什么真正使用它了,也没有那么多测试使用它。表的存储和检索方式在版本之间发生了变化,因此驱动程序必须意识到这一点。由于 Astyanax 没有得到维护,它可能不会正确。Astyanax 已退役,仅适用于较旧的应用程序。您应该真正使用java 驱动程序(与 Astyanax 页面上的建议相同)。

炎炎设计

我记得在 Cassandra 0.8.8 - 1.1 和 1.2 中使用 Astyanax。曾经有一段时间,我们会将所有数据(列)作为 blob 推送到一个分区中(启用更快的写入),然后我们会从 thrift 胖客户端解析数据(据称 Cassandra 此时读取速度很慢)。我们必须跟踪模式,然后在反序列化来自 thrift 客户端的输出时,我们将根据所有单个列的数据类型进行解析。在引入 CQL 之后,所有这些都发生了变化,正如 Chris 指出的那样,这是使用 c* 的推荐方式。

慕桂英3389331

您尝试过哪些版本的 Scylla?尽管 Cassandra 已弃用 Thrift,但 Scylla 仍支持它。
随时随地看视频慕课网APP

相关分类

Java
我要回答