Question

Je travaille sur un système qui miroirs des jeux de données à distance en utilisant les initiales et deltas. Quand un premier arrive, il supprime la masse tout et pré-existante inserts de masse les nouvelles données. Quand un delta arrive, le système fait un tas de travail pour traduire en des mises à jour, insertions et suppressions. Initiales et deltas sont traitées à l'intérieur des transactions longues pour maintenir l'intégrité des données.

Malheureusement, la solution actuelle n'est pas mise à l'échelle très bien. Les transactions sont si importantes et à long courir que notre tourbières SGBDR vers le bas avec divers problèmes de contention. En outre, il n'y a pas une bonne piste de vérification de la façon dont les deltas sont appliquées, ce qui rend difficile de résoudre les problèmes à l'origine des versions locales et distantes de l'ensemble de données pour obtenir désynchronisés.

Une idée est de ne pas exécuter les initiales et les deltas dans les transactions du tout, et au lieu de joindre un numéro de version à chaque enregistrement indiquant que delta ou parapher il est venu. Une fois un premier ou delta est chargé avec succès, l'application peut être alerté qu'une nouvelle version du jeu de données est disponible.

Cela laisse juste la question de savoir comment exactement pour composer une vue d'un ensemble de données jusqu'à une version donnée de la formation initiale et deltas. (TimeMachine d'Apple fait quelque chose de similaire, en utilisant des liens durs sur le système de fichiers pour créer « vue » d'un certain point dans le temps.)

Quelqu'un at-il une expérience résoudre ce genre de problème ou la mise en œuvre de cette solution particulière?

Merci!

Était-ce utile?

La solution 2

Merci à tous ceux qui ont essayé.

Pour toute autre personne qui se termine ici, j'étalonnage une solution qui ajoute une colonne « dataset_version_id » et « dataset_version_verb » à chaque table en question. A l'intérieur d'une sous-requête corrélative procédure stockée est ensuite utilisée pour récupérer le dataset_version_id en cours lors de la récupération des enregistrements de spécifiques. Si la dernière version du dossier a dataset_version_verb de « supprimer », il est filtré des résultats par une clause WHERE.

Cette approche a une performance moyenne ~ 80% a frappé jusqu'à présent, ce qui peut être acceptable pour nos besoins.

Autres conseils

ont un auteur et plusieurs bases de données de lecteur. Vous envoyez l'écriture à la base de données de l'un, et la propager exactement les mêmes modifications à toutes les autres bases de données. Les bases de données de lecture seront à terme cohérente et le temps de mise à jour est très rapide. Je l'ai vu cela dans des environnements qui obtiennent plus de pages vues par jour 1M. Il est très évolutive. Vous pouvez même mettre un routeur matériel devant toutes les bases de données lues à l'équilibre de charge eux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top