que j'ai un "message" table avec 2 index secondaires: tableComment gérez-vous les index de dénormalisation/secondaires dans le sharding de base de données?
- "recipient_id"
- "sender_id"
Je veux shard le "message" par "recipient_id". De cette façon, pour récupérer tous les messages envoyés à un certain destinataire, j'ai seulement besoin d'interroger un fragment.
Mais en même temps, je veux être en mesure de faire une requête qui demande tous les messages envoyés par un certain expéditeur. Maintenant, je ne veux pas envoyer cette requête à chaque fragment de la table "message". Une façon de procéder est de dupliquer les données et d'avoir une table "message_by_sender" partagée par "sender_id". Le problème avec cette approche est que chaque fois qu'un message a été envoyé, j'ai besoin d'insérer le message dans les deux tables "message" et "message_by_sender". Mais si après insertion dans "message" l'insertion dans "message_by_sender" échoue? Dans ce cas, le message existe dans "message" mais pas dans "message_by_sender".
Comment puis-je m'assurer que si un message existe dans "message" alors il existe aussi dans "message_by_sender" sans recourir à la validation en 2 phases?
Cela doit être un problème très commun pour toute personne qui partitionne ses bases de données. Comment gérez-vous cela?