Nous utilisons actuellement Hazelcast ( http://hazelcast.org/ ) en tant que réseau de données en mémoire distribué. Cela a bien fonctionné pour nous, mais seuls en mémoire ont épuisé son chemin dans notre cas d'utilisation, et nous envisageons de porter notre application à un magasin persistant NOSQL. Après les comparaisons et évaluations habituelles, nous sommes limites à la recherche de Cassandra, plus étincelle pour Analytics. P>
Néanmoins, il y a une lacune dans nos besoins architecturaux que nous ne saisons toujours pas comment résoudre dans Cassandra (avec ou sans étincelle): Nazelcast nous permet de créer une requête continue dans ce que, chaque fois qu'une ligne est ajoutée / enlevée. / modifié à partir de la clause des résultatsset, Hazelcast appelle le dos avec la notification correspondante. Nous utilisons cela pour mettre à jour en permanence les clients via Ajax Streaming avec les lignes neuves / modifiées. P>
Ceci est probablement une inadéquation conceptuelle que nous faisons, alors - comment répondre au mieux à ce cas d'utilisation à Cassandra (avec ou sans l'aide d'une étincelle)? Y a-t-il quelque chose dans l'API qui permet des requêtes continues sur les changements de clé / clause (ne l'a-t-il pas trouvé)? Existe-t-il une autre façon d'obtenir un flux de mises à jour de la clé / clause? Événements de quelque sorte? P>
Je suis conscient que nous pourrions, éventuellement, sonder périodiquement Cassandra, mais dans notre cas d'utilisation, le client est potentiellement intéressé par un grand nombre de notifications de clause de table (pensez "tous les changements apportés aux postes de navires sur la côte de Californie"), et itératant hors du magasin tuerait l'évolutivité de l'écologiste. p>
Par conséquent, la question magique: qu'est-ce qu'on manque? Cassandra est-il le mauvais outil pour le travail? Sommes-nous pas au courant d'une partie particulière de l'API ou de la bibliothèque externe dans / en dehors du domaine Apache qui permettrait cela? P>
Merci beaucoup pour toute assistance! P>
hugo p>
4 Réponses :
Je ne suis pas un expert en étincelle, alors prenez cela avec un grain de sel, mais peut-être que vous pourriez peut-être utiliser une approche comme celle-ci: p>
Utilisez Swuming Streaming pour analytique en temps réel du flux de données entrant et appuyant des mises à jour de position aux clients en temps réel. p> li>
Utilisez Cassandra pour un stockage persistant, des vues en cache et des déplacements de données à partir duquel les clients peuvent tirer des données. P> li> ol>
Vous écririez donc une application de streaming d'allumage qui se connecte à votre flux de données entrant, probablement celui qui rapporte des positions de navire à intervalles réguliers. Lorsqu'il reçoit une position de navire, il rechercherait la dernière position connue du navire à Cassandra (précédemment stockée dans une série de positions temporelle en regroupement pour cet ID de navire, triés inverse par l'horodatage afin que la position la plus récente soit la première ligne) . Si la position du navire a changé, l'application Spark insérerait une nouvelle ligne de série TIME à Cassandra et repousser la nouvelle position à votre client en temps réel. P>
Spark écrirait également d'autres mises à jour de Cassandra pour les clients Rollup Les clients peuvent vouloir savoir, comme une table pour le nombre de navires à la baie de San Francisco. Lorsque le client clique sur la baie, la table de roulement est interrogée pour tirer cette donnée. Tout ce qui nécessite un temps de réponse rapide sur le client doit être pré-calculé par Spark et stocké à Cassandra pour une récupération rapide. P>
Lorsqu'un nouveau client démarre, ils doivent d'abord interroger (tirer de) Cassandra pour obtenir la position actuelle de tous les navires, puis les mises à jour en temps réel sur ces données seraient poussées à partir de l'application Spark. P>
Utilisez Shak Streaming. Lorsqu'une mise à jour est nécessaire, effectuez deux opérations:
Votre code pourrait ressembler à ceci comme suit: p> espère que cela aide. p> p>
Vous voulez probablement regarder Spark Job Server P>
Cela vous permet de faire des choses comme partager des contextes d'étincelles - et ainsi d'encaissement de RDD - entre différents emplois. P>
et fournit une API reposante pour une étincelle pour une heure proche réelle (basée sur la fréquence à laquelle vous rafraîchissez les caches) Interrogation. P>
Connecteur Cassandra peut aider. Il prend en charge la diffusion de la table de Cassandra:
Avez-vous vérifié Cassandra Triggers ( datastax.com/dev/blog/... )?
Salut. Merci. Oui, j'ai - la chose est que les déclencheurs sont dans le chemin d'écriture de Cassandra et la mise en place de notifications / écrit plus loin là-bas peut gêner sévèrement la performance de l'écriture Cassandra est si connue pour - j'essayais d'éviter ces :)