2010-04-27 8 views
0

J'ai des données qui ne sont pas correctement "partitionnées" (faute d'un meilleur mot).Réplication - Synchronisation de la plupart des données de temps en temps

Tous les insertions, traitements et rapports se produisent sur la même table. La majeure partie du traitement arrive peu de temps après l'insertion et peu de temps après, elle devient immuable (nous parlons des jours).

Je pouvais faire toutes les insertions et le traitement sur une nouvelle table que je réplique à l'ancienne table. Lorsque je détecte que les données sont devenues immuables, je supprime les données de la nouvelle table, mais je modifie la procédure de suppression de la réplication stockée afin que la suppression ne soit pas répliquée.

À quel point est-ce une mauvaise idée? < edit1> C'est-à-dire, éditer la procédure stockée de réplication. </edit1>

Il semble attrayant pour le moment (je n'ai pas encore dormi dessus) car il pourrait atténuer un problème de performance avec seulement de très petits changements dans l'application. Il semble aussi que ce soit un bon moyen de me tirer une balle dans le pied.

Edit1:

J'aime l'idée d'insérer dans deux tables parce que je peux éviter la vue et la fenêtre de maintenance décrit dans la réponse de Jono. Sans vouloir t'offenser, Jono, j'utilise cette technique ailleurs. Je pourrais vouloir utiliser la réplication parce qu'une table pourrait être dans une autre base de données (je sais, je n'ai pas mentionné cela) et ainsi je n'ai pas à m'inquiéter de commettre à deux tables, je laisse juste la réplication manipuler cette. Mon problème actuel (que je n'ai pas clarifié) est que la modification de la procédure stockée de réplication pourrait finir par être un casse-tête de déploiement/maintenance.

Répondre

1

Je ne préconiserais pas la réplication pour résoudre un problème de performance (à moins que ce soit un problème de distribution physique des données); si quelque chose va ralentir votre système que les changements sont propagés à leur destination. Si vous utilisez un seul serveur, je suggère d'ajouter une deuxième table avec le même schéma que la première, mais avec vos index optimisés pour le type de travail que vous faites dans votre phase de traitement. Créez ensuite une vue qui sélectionne à partir des deux tables et utilisez cette vue dans toute requête où vous souhaitez l'union des deux tables. Vous pourriez alors lancer plus de matériel à la deuxième table (je pense à un groupe de fichiers séparé sur plus de broches) et ensuite migrer les données sur un délai hebdomadaire dans la première table, pendant une fenêtre de maintenance disponible.

+0

Je peux être en mesure de lancer une de ces tables sur un autre serveur, c'est pourquoi je pensais que la réplication pourrait faire partie de ma solution. Merci d'avoir lu ma question mal formulée. –

+0

Plutôt que d'éditer la procédure, pourquoi ne pas y coder une logique qui vérifie un état partagé (une ligne dans une table de votre choix avec les valeurs {"is_replication_enabled", 0}) avant d'envoyer les lignes à la source à destination. Votre procédure de suppression peut définir cette valeur sur 0 au démarrage et sur 1 lorsqu'elle se termine. – Jono