Je n'ai aucune expérience avec Flink
ou Spark
, et j'aimerais utiliser l'une d'entre elles pour mon cas d'utilisation. J'aimerais présenter mon cas d'utilisation et, espérons-le, avoir une idée de ce qui peut être fait avec l'un ou l'autre, et s'ils peuvent tous les deux le faire, lequel fonctionnerait le mieux.Flink ou Spark pour les données incrémentales
J'ai un tas d'entités A
stockées dans un magasin de données (Mongo pour être précis mais cela n'a pas vraiment d'importance). J'ai une application Java qui peut charger ces entités et exécuter une logique sur eux pour générer un flux de certains type de données E
(pour être 100% clair, je n'ai pas le Es
dans un ensemble de données, j'ai besoin de les générer en Java après que je charge le As
de la DB)
J'ai donc quelque chose comme ça
A1 -> Stream<E>
A2 -> Stream<E>
...
An -> Stream<E>
le type de données E
est un peu comme une longue ligne dans Excel, il a un tas de colonnes. Je dois rassembler tous les Es
et exécuter une sorte d'agrégation de pivot comme vous le feriez dans Excel. Je peux voir comment je pourrais le faire facilement dans Spark
ou Flink
.
Maintenant, c'est la partie que je ne peux pas comprendre.
Imaginez que l'un de l'entité A1
est modifiée (par un utilisateur ou un processus), cela signifie que tous les Es
pour la mise à jour A1
besoin. Bien sûr, je pourrais recharger tous mes As
, recalculer tous les Es
, puis réexécuter l'ensemble de l'agrégation. Je me demande s'il est possible d'être un peu plus intelligent ici.
Serait-il possible de recalculer seulement le Es
pour A1
et de faire le minimum de traitement.
Pour Spark
serait-il possible de conserver l'RDD
et seulement mettre à jour une partie de celui-ci en cas de besoin (ici qui serait le Es
pour A1
)?
Pour Flink
, dans le cas du streaming, est-il possible de mettre à jour des points de données déjà traités? Peut-il gérer ce genre de cas? Ou pourrais-je générer négatifs événements A1
vieux Es
(c'est-à-dire qui les supprimer du résultat), puis ajouter les nouveaux?
Est-ce un cas d'utilisation courant? Est-ce que c'est quelque chose que Flink
ou Spark
sont conçus pour faire? Je le pense mais encore je n'ai pas utilisé non plus alors ma compréhension est très limitée.
J'ai gardé la question large essayant de saisir l'essence du problème. Vous dites que la réponse dépend de nombreuses conditions. Quels aspects de la question voudriez-vous que je développe? – phoenix7360