Nous avons une application orientée objet de taille convenable. Chaque fois qu'un objet de l'application est modifié, les modifications de l'objet sont enregistrées dans la base de données. Cependant, cela est devenu moins qu'idéal.Quel est le meilleur moyen de stocker et de rechercher dans les transactions d'objets?
Actuellement, les transactions sont stockées en tant que transaction et ensemble de transactionLI.
La table de transaction contient des champs pour who, what, when, why, foreignKey et foreignTable. Les quatre premiers sont explicites. ForeignKey et foreignTable sont utilisés pour déterminer quel objet a été modifié. TransactionLI a horodatage, clé, val, oldVal, et un transactionID. Ceci est fondamentalement un système de stockage key/value/oldValue.
Le problème est que ces deux tables sont utilisées pour chaque objet de l'application, ce sont donc de très grandes tables maintenant. Les utiliser pour tout est lent. Les index aident tellement. Donc, nous pensons à d'autres façons de faire quelque chose comme ça. Ce que nous avons considéré jusqu'à maintenant: - Sharding ces tableaux par quelque chose comme l'horodatage. - Dénormaliser les deux tables et les fusionner en une seule. - Une combinaison des deux ci-dessus. - Faire quelque chose dans le sens de sérialiser chaque objet après un changement et le stocker dans subversion. - Probablement autre chose, mais je ne peux pas y penser maintenant.
Tout le problème est que nous aimerions avoir un mécanisme pour stocker et rechercher correctement les données transactionnelles. Oui, vous pouvez forcer l'alimentation dans une base de données relationnelle, mais vraiment, ce sont des données transactionnelles et doivent être stockées en conséquence.
Que font tous les autres?
quelle base de données utilisez-vous? Vous pouvez rechercher le suivi des modifications SQL dans SQL 2008. Il ne suit pas vos objets, mais il suit vos modifications de données et les exécute. – D3vtr0n