我正在尝试使用 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 中的行为。
3 回答
炎炎设计
TA贡献1808条经验 获得超4个赞
我记得在 Cassandra 0.8.8 - 1.1 和 1.2 中使用 Astyanax。曾经有一段时间,我们会将所有数据(列)作为 blob 推送到一个分区中(启用更快的写入),然后我们会从 thrift 胖客户端解析数据(据称 Cassandra 此时读取速度很慢)。我们必须跟踪模式,然后在反序列化来自 thrift 客户端的输出时,我们将根据所有单个列的数据类型进行解析。在引入 CQL 之后,所有这些都发生了变化,正如 Chris 指出的那样,这是使用 c* 的推荐方式。
添加回答
举报
0/150
提交
取消