2015-03-30 2 views
0

Я пытаюсь создать базу данных Cassandra на основе того, что я нашел here.Cassandra-Hector InvalidRequestException

, но независимо от того, что я делаю, я не буду получаю эту ошибку

Вызванный: 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(); 
    } 

} 

Любые предложения по его устранению?

ответ

2

Проверьте, существует ли «myKeyspace» до того, как вы попытаетесь создать его, вы не сможете его создать, если его уже есть.

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

Он может создавать условия гонки в вашем коде, но если вызывается из нескольких мест/узлов вокруг времени создания. Это разрешено на CQL, если вы можете обновить его.

При использовании CQL вы можете использовать «CREATE KEYSPACE ЕСЛИ НЕ СУЩЕСТВУЕТ blarg WITH ...». Хотя, если использовать cql, возможно, захотите рассмотреть переход от hector к одной из библиотек, которые предназначены для него.

Смежные вопросы