J'ai une base de données NoSQL que nous utilisons pour le traitement des données, car elle peut être utilisée pour mon application plus rapidement que SQL. Je traite notre base de données NoSQL presque comme un cache d'informations, le SQL étant l'autorité des données, et le magasin NoSQL étant mis à jour avec les changements. Pour l'instant, cela se fait via notre application, donc quand une requête arrive pour une modification, elle est faite dans la base de données SQL, et dans la base de données NoSQL. Cela échoue parfois, car la mise à jour NoSQL échoue parfois, ou d'autres situations entraînent une désynchronisation de la base de données NoSQL.Stratégie pour conserver des bases de données distinctes en synchronisation
Je pourrais faire une mise à jour par lot toutes les X minutes, mais il y a beaucoup d'informations dans les magasins de données, et cela prendrait des heures pour s'assurer qu'elles sont synchronisées. Nous avons quelques timestamps pour faire une différence sur ce qui a été changé, mais ce n'est pas toujours exact.
Je me demande quelle est la stratégie recommandée pour conserver un magasin de données (cache de base de données secondaire) en synchronisation avec mon magasin principal?
Vous avez mentionné les champs de date, l'avez-vous fait au niveau du message et de l'entité NoSQL? Avez-vous effectué une mise à jour avec état (append) ou une mise à jour sans état (état complet dans un message JMS)? Pour vos champs de date, avez-vous simplement ignoré l'un des "anciens" messages JMS si votre entité NoSQL était plus récente? J'utilise les services Web pour mon CRUD, avez-vous un concept similaire dans la file d'attente pour faire CRUD? – Nicholas
Nous mettons les champs de date au niveau de l'enregistrement dans SQL. CreateDate, UpdateDate. Ensuite, vous pouvez lancer vos diffs contre ceux et expédier ce qui a changé/ce qui est nouveau. Au niveau de l'application, nous écrivions un objet sur SQL, puis le sérialisions en JSON et l'envoyions via JMS. Pour toutes les écritures à NoSQL nous avons fait des upserts. Cela évitait d'avoir à savoir ce qui était plus récent. Exemple: Quelqu'un écrit un nouvel article dans le CMS. Nous l'écrivons en SQL et envoyons également un message JMS avec l'objet sérialisé en JSON. L'écriture NoSQL serait upsert (écrire nouveau si pas là, mise à jour si existe). Est ce que ça aide? – ryan1234
Si quelqu'un supprimait un article, était-ce supprimer une file d'attente séparée, ou utilisiez-vous une file d'attente avec un champ d'opération (ADD, DELETE) ou aviez-vous une file d'attente pour les ajouts, une pour les suppressions? – Nicholas