Je construis un système de comptabilité distribuée. Pour ce qui est de la structure et des exigences de la base de données, il est probablement plus facile de décrire l'application comme une application semblable à Twitter, mais avec une structure de base de données hiérarchique de 14 tables. Une entreprise qui utilise l'application peut avoir 1 utilisateur et plus, tous partageant les informations de l'entreprise.Conseil de conception de magasin de données AppEngine requis
Actuellement, chaque entité représente un type d'enregistrement, à savoir les clients, les factures, etc. Toutes les entités ont un parent qui est l'utilisateur de l'application. (pour des raisons de cohérence des requêtes HRD)
Chaque requête sur la base de données comprend 14 requêtes AppEngine. Un pour chaque table. La requête implique le filtrage des propriétés.
Une nouvelle exigence est qu'une requête d'un utilisateur peut nécessiter des valeurs de propriété différentes en fonction de chacun des autres utilisateurs. Cela signifie que nous avons besoin de 14 requêtes AppEngine (14 fois le nombre d'entreprises-utilisateurs). Cela semble beaucoup trop.
kind Ancêtre requêtes qui peuvent filtrer par des propriétés serait vraiment bien, hélas, ne peut faire :)
Mes options sont:
Set type d'entité à l'utilisateur. Pas de parent. Cela signifie que tous les types d'enregistrements sont mixés. (Les champs filtrés existent dans tous les types d'enregistrement). Ce n'est pas joli. Mais le considèreriez-vous? Vous avez un type d'entité fixe et une requête par filtre uniquement.
Le résultat est l'équivalent des requêtes Ancêtres sans kind. Cependant, je crains que ce soit lent dans une utilisation multi-utilisateur.
Quelques chiffres: Nous prévoyons de 10.000 entreprises, moyenne de 5 utilisateurs par entreprise et 1 à 5 millions d'enregistrements par type d'enregistrement. (X 14 pour un total)
Merci de patienter jusqu'à présent .. :)
Pourquoi chaque requête nécessite-t-elle d'interroger toutes les tables? Cela semble être une exigence très étrange. –
@Nick, l'application a un DB distribué. Chaque client dispose d'une copie locale de la base de données avec des informations pertinentes pour ce client. Chaque requête doit trouver toutes les informations nouvelles/modifiées dans l'ensemble de la base de données et transférer les données au client pour un usage local. (chaque requête trouvera des changements dans presque toutes les tables) – OferR