2011-07-21 1 views
0

Si j'ai une table User (avec une id mondiale comme clé primaire) qui est dans 10 bases de données fragmentées (DB1 - DB10) sur la base du username , et une autre table essaie de se référer à la table User utilise le id global de ligne de table User, il n'y a aucun moyen pour moi de savoir que DB (1-10) que l'utilisateur se trouve dans.Je ne peux pas dire dans quelle DB une ligne est située juste de l'identificateur global

Quelle est la solution à ce problème?

+1

Comment l'avez-vous partitionné? Qui a conçu le système? Quel RDBMS? Vous l'avez marqué comme 3 différents. Il y a beaucoup d'informations manquantes ici ... – JNK

Répondre

1

Soit:

  1. Changez votre système de sharding afin que vous Shard basé sur la clé que vous utilisez pour rechercher ces données. Si c'est par ID, toujours le faire par ID, et shard par ID (DB = ID% 10)

  2. la clé primaire de la table User la username. Renforcez son unicité et utilisez le username comme clé étrangère dans les autres tables, et non un identificateur synthétique.

  3. Créez une table de correspondance que vous pouvez référencer et qui correspond aux zones id.

+0

d'abord n'est pas possible parce que lorsque l'utilisateur se connecte, je ne peux pas m'attendre à ce qu'il tape l'ID global .. comme pour 3, pour les utilisateurs qui pourraient faire l'affaire. mais que faire si pour les tables avec autant de lignes que même cette table de recherche nécessite un sharding? quel truc j'utiliserais alors? – TwentyTwo

+0

Sauf si vous obtenez plus que 10 millions d'utilisateurs, cette table utilisateur (recherche) ne devrait pas poser de problème. Et même alors, le SGBD devrait être capable de gérer cela. Nous avons des tables avec beaucoup plus de lignes que dans un seul serveur (Oracle, PostgreSQL) sans problèmes. –

+0

je ne suis bien sûr pas inquiet de la table des utilisateurs. dire que chaque utilisateur a 200 "articles" dans une rangée qui est déjà 2 milliards de lignes avec seulement 10 millions d'utilisateurs. – TwentyTwo

Questions connexes