2013-05-31 5 views
-1

Je travaille sur une application Spring et j'ai besoin de parler à Cassandra en utilisant Hector. Besoin d'aide quant à la façon d'aborder. Je veux utiliser JPA et utiliser les fonctions d'injection de dépendance du printemps aussi.Intégrer le ressort avec cassandra en utilisant Hector

Les points d'aide!

+1

S'il vous plaît nous montrer ce que vous avez essayé. – krlmlr

+0

Salut, j'ai essayé d'intégrer mon projet Spring MVC avec ma base de données locale Cassandra. J'ai configuré le fichier POM.xml et obtenu les dépendances nécessaires. Le calque Dal est terminé. Je suis confronté à deux problèmes 1. Comment puis-je faire des requêtes que j'ai besoin d'aller chercher des données de plus d'une colonne Families.2) Comment faire pour indexer les colonnes pour Querying –

Répondre

0

Kundera, je pourrais l'intégrer au printemps très facilement et Oui comme Hardik Bhalani a suggéré les familles de colonnes ont été conçus avec soin pour atteindre l'efficacité maximale

1

réponse à votre 1er problème: vous devez définir et normaliser votre modèle de données afin de réduire la traversée entre plusieurs familles de colonnes. Par exemple Si vous stockez un identifiant d'utilisateur dans une liste d'objets CF, vous devez insérer l'objet JSON de l'utilisateur avec les détails d'utilisation au lieu de cet identifiant, de manière à éviter la traversée vers l'usermaster CF.

+0

Quel problème répondez-vous? Est-ce que vos conseils aident à avoir un Spring-Cassandra-Hector ou est-ce en ce qui concerne l'APP? Je n'ai pas encore travaillé avec JPA et Spring-Hector-Cassandra. – Crowie

+1

ma réponse pointe à la solution de "Comment puis-je faire des requêtes car j'ai besoin d'extraire des données de plusieurs colonnes?" ma solution est d'essayer de concevoir un modèle de données pour qu'il nécessite moins de dépendance comme expliqué dans mon exemple –

+0

Eh bien, je suis en production maintenant avec mon code.J'ai utilisé Kundera + SPrings.Yes comme Hardik Bhalani a suggéré que les familles de colonnes ont été conçues avec soin pour atteindre une efficacité maximale. –

0

J'ai réussi à faire assez facilement en utilisant ce documentation, mais cela vous laisse SimpleCassandraDao (que vous pouvez injecter à votre DAO) - ce qui est assez limité.

Ce que je ne créais la connexion pragmatiquement:

@PostConstruct 
public void connect() { 
if (Boolean.parseBoolean(isActive)) { 
    CassandraHostConfigurator cassandraHostConfigurator = new CassandraHostConfigurator(this.socket); 
    cluster = HFactory.getOrCreateCluster(clusterName, cassandraHostConfigurator); 
    ConfigurableConsistencyLevel consistencyLevelPolicy = new ConfigurableConsistencyLevel(); 
    consistencyLevelPolicy.setDefaultReadConsistencyLevel(getConsistencyLevelPolicy()); 
    keyspace = HFactory.createKeyspace(keyspaceName, cluster, consistencyLevelPolicy); 
    if (isConnected()) 
    fireConnectionEvent(true); 
    else { 
    LOG.error("Could not connect to socket " + this.socket + ". Connection to Cassandra DB is down!!!"); 
    } 
} else { 
    LOG.info("Cassandra connection is not active hence could not connect to socket " + this.socket 
     + ". Please activate the connection before trying to connect"); 
} 
} 

Cette méthode est une partie d'un grain de printemps (annoté avec le composant d'annotation), donc une fois que l'application est déployée le pool de connexion est créée . Comme vous le voyez, je déclenche un événement de connexion (en utilisant le support Spring Application-Event). L'événement contient le nouvel espace de touches créé puis capturé par mon Dao. De cette façon, mon Dao peut initialiser les requêtes requises. par exemple:

StringSerializer stringSerializer = StringSerializer.get(); 
SliceQuery<String, String, String> query = HFactory.createSliceQuery(this.keyspace, stringSerializer, stringSerializer, stringSerializer) 
     .setColumnFamily(columnFamily).setRange(null, null, false, 4).setKey(rowKey); 

    ColumnSlice<String, String> columnsSlice = query.execute().get(); 
    List<HColumn<String, String>> columns = columnsSlice.getColumns(); 

J'espère que cela aide.

0

Vous pouvez essayer d'utiliser Playorm qui 1. prend en charge les jointures de type sql pour deux familles de colonnes 2. Fournit également un support d'indexation sur les colonnes.

Questions connexes