5

Nous disposons d'une application métier pour gérer des millions d'enregistrements bibliographiques (lots de texte) à l'aide de SQL Server (2008). La base de données est très normalisée (un enregistrement complet peut facilement être constitué de dix tables jointes plus des collections imbriquées). Les transactions d'écriture sont bonnes, et nous avons pour l'instant une solution de recherche très réactive, qui utilise généreusement l'indexation de texte intégral et les vues indexées. Le problème est qu'en réalité, une grande partie de ce dont les utilisateurs de recherche ont besoin pourrait être mieux servie par une copie de type entrepôt en lecture seule des données, mais elle devrait être continuellement copiée presque en temps réel (la latence de quelques minutes est bien).Recommandation d'architecture à l'aide de SQL Server pour l'agrégation et la dénormalisation en temps réel

Notre recherche est optimisée par plusieurs colonnes calculées ou tables composites, et nous aimerions en ajouter d'autres. Les vues indexées ne peuvent pas couvrir tous les besoins en raison de leurs contraintes (telles que l'absence de jointures externes). Il existe des douzaines d '«aspects» à ces données, tout comme un entrepôt de données en lecture seule pourrait fournir, impliquant des autorisations, la géographie, la catégorie, la qualité et le nombre de documents associés. Nous composons également des représentations XML complexes des enregistrements qui sont assez statiques et qui peuvent être composés et stockés une fois. La quantité totale de dénormalisation, de calcul et d'optimisation de recherche provoque un retard inacceptable si elle est complètement effectuée via des déclencheurs, et est également sujette à des conflits de verrouillage. J'ai recherché certaines des suggestions SQL Server de Microsoft, et je voudrais savoir si quelqu'un ayant une expérience avec des exigences similaires peut offrir une recommandation des trois suivantes (ou d'autres suggestions qui utilisent la pile SQL Server/.Net) :

  1. réplication transactionnelles à une seule lecture copie - mais on ne sait pas de la documentation combien on peut modifier le schéma sur le côté abonné et ajouter des déclencheurs, des colonnes calculées ou tables composites;

  2. Tableau partitionnement - ne pas modifier les données, mais peut-être pour segmenter les grandes zones de données qui sont actuellement recalculés en permanence, comme les autorisations, le type d'enregistrement (60), région géographique, etc ... serait-ce permettre déclenche sur le côté transactionnel à exécuter avec moins de verrous?

  3. traitement par lots hors ligne - Microsoft utilise cette phrase souvent, mais ne donne pas de bons exemples, à l'exception de « la vérification des signes de fraude de carte de crédit » sur le côté abonné de réplication de transaction ... ce qui serait un grand échantillon, mais comment cela se fait-il exactement dans la pratique? Les travaux SSIS qui s'exécutent toutes les 5 minutes? Service Broker? Des exécutables externes qui sondent continuellement? Nous voulons éviter la solution 'exécuter un long processus la nuit', et nous voulons aussi éviter de bloquer le côté transactionnel des choses en exécutant une routine d'agrégation/de composition intensive en mise à jour toutes les 5 minutes sur le serveur transactionnel.

    • Mise à jour # 3: après la publication, je l'ai trouvé this SO answer avec un lien vers Real Time Data Integration en utilisant le suivi des modifications, Service Broker, SSIS et déclenche - semble prometteur - serait-ce un chemin recommandé?

    • Une autre mise à jour: qui, à son tour, m'a aidé à trouver rusanu.com - toutes les choses ServiceBroker par l'utilisateur SO Remus Rusanu. Les solutions de messagerie asynchrones semblent mieux correspondre à notre scénario que les scénarios de réplication ...

+0

Pas de grande réponse ici, mais cela montre comment vous pouvez exécuter des scripts après l'initialisation de la réplication: http://www.englishtosql.com/english-to-sql-blog/2010/9/13/t-sql-tuesday- 10-apply-indexes-to-replicated-tables.html. – Sam

+0

@Sam Donc si mon script post-snapshot a créé une nouvelle table d'abonné non dans l'éditeur, et un nouveau déclencheur d'abonné sur l'une des tables qui correspond à l'éditeur et reçoit des mises à jour transactionnelles ... ce déclencheur se déclencherait et ajouterait des données à mon nouvelle table lorsque les mises à jour transactionnelles sont publiées? – mdisibio

Répondre

1

technologie Service Broker est bon pour servir votre tâche bien qu'il y ait peut-être inconvénient potentiel en fonction de la configuration de votre système particulier. La caractéristique la plus précieuse IMO est la capacité de découpler deux types de traitement - l'écriture et l'agrégation. Vous pourrez le faire même en utilisant différentes bases de données/instances SQL Server/serveurs physiques de manière très fiable. Bien sûr, vous devez passer du temps à concevoir un processus d'échange de messages - en spécifiant des formats de message, en planifiant des conversations, etc., car cela a une énorme influence sur la satisfaction du système résultant.

J'ai utilisé SSBS pour ma tâche plus ou moins similaire - création en temps quasi réel d'un entrepôt de données analytique basé sur un flux de données régulier.

+0

Merci. Pouvez-vous décrire brièvement votre solution si elle n'a pas utilisé SSBS? – mdisibio

+0

Désolé pour mon anglais .. Ma solution utilise SSBS et donc je vous le recommande. J'étais satisfait de l'utilisation de SSBS, même si cela a ses propres inconvénients, mais cela correspond bien à ma tâche. – Serg

+0

J'ai mis à jour ma réponse en essayant de le rendre plus clair. – Serg