我正在尝试根据发现的内容创建一个Cassandra数据库
here

但无论我做什么,我一直在收到此错误


  原因:me.prettyprint.hector.api.exceptions.HInvalidRequestException:InvalidRequestException(为什么:键空间名称必须是不区分大小写的唯一名称(“ myKeyspace”与“ myKeyspace”冲突)


这是我的代码:

public static void setSerializedMap(int index,String serializedVector){
    Cluster cluster = HFactory.getOrCreateCluster("TestCluster", "localhost:9160");

    ColumnFamilyDefinition columnFamilyDefinition=HFactory.createColumnFamilyDefinition("myKeyspace", "user", ComparatorType.BYTESTYPE);
    KeyspaceDefinition keyspaceDefinition=HFactory.createKeyspaceDefinition("myKeyspace",ThriftKsDef.DEF_STRATEGY_CLASS,3,Arrays.asList(columnFamilyDefinition));
    cluster.addKeyspace(keyspaceDefinition,true);

    Keyspace keyspace=HFactory.createKeyspace("Keyspace", cluster);

    Mutator<String> mutator = HFactory.createMutator(keyspace, me.prettyprint.cassandra.serializers.StringSerializer.get());
    try{
        mutator.addInsertion("cluster", "user", HFactory.createStringColumn("cluster-" + index, serializedVector));
    }catch(HectorException e){
        e.printStackTrace();
    }

}


关于如何解决它的任何建议?

最佳答案

在尝试创建“ myKeyspace”之前,请先检查是否存在,如果已经存在则无法创建。

if (cluster.describeKeyspace("myKeyspace") == null) { ...


尽管如果在创建时从多个位置/节点调用它,则可能会在您的代码中创建竞争条件。如果可以升级,可以在CQL中解决。

如果使用CQL,则可以使用“如果不存在blarg WITH ...,则创建键空间”。尽管如果使用cql,可能要考虑从hector移至为其专门设计的库之一。

09-05 10:00