2010-05-11 6 views
1

Il s'agit d'une question de suivi/publication à une autre question; comme j'ai découvert une solution qui m'a conduit à un nouveau problème.Suivi: Tableau par type de béton Performance/Mise à l'échelle

Classes to Entities; Like-class inheritence problems

Nous construisons ce système de jeu, pour ainsi dire; et j'utilise le concept de Table par type de béton pour effectuer la modélisation de l'héritage.

Mon souci est l'évolutivité et la performance. Je crois que j'ai utilisé une technique similaire auparavant et il est sorti assez lent, mais je ne suis pas un bon DBA, je suis un programmeur. Donc, je suis très étranger à la façon dont cela se traduira en SQL. Mais fondamentalement, il me semble que ce serait lent et faible d'avoir autant de requêtes 'liées' fonctionnant ensemble. J'ai posté mon schéma de schéma et d'entité pour référence. Si je peux donner des informations plus claires, s'il vous plaît demandez, car je ne suis pas vraiment certain de ce qui est pertinent pour «régler» cette approche.

alt text http://img46.imageshack.us/img46/1043/database.png

alt text http://img293.imageshack.us/img293/6454/entities.png

utilisation de l'échantillon serait typique comme suit;

static void Main(string[] args) 
{ 
    DataContext db = new DataContext(); 

    Character character = new Character() 
    { 
     Name = "First", 
     Ring = new Mapping.Ring() 
    }; 


    character.Ring.Keys.Add(
     new Random() 
     { 
      Dice = 2, 
      Sides = 30, 
     }); 

    character.Ring.Keys.Add(
     new Measure() 
     { 
      Maximum = 100, 
      Minimum = 0 
     }); 
    character.Ring.Keys.Add(
     new Measure() 
     { 
      Maximum = 100, 
      Minimum = 0 
     }); 

    db.Characters.AddObject(character); 
    db.SaveChanges(); 

    foreach (Character c in db.Characters) 
    { 
     Console.WriteLine(c.Name); 

     Console.WriteLine(new string('-', 80)); 

     foreach (Measure k in c.Ring.Keys.OfType<Measure>()) 
      Console.WriteLine(String.Format("{0}/{1}", k.Minimum, k.Maximum)); 

     foreach (Random k in c.Ring.Keys.OfType<Random>()) 
      Console.WriteLine(String.Format("{0}d{1}", k.Dice, k.Sides)); 
    } 

    Console.ReadLine(); 
} 

Répondre

1

Je pense que beaucoup de cela va descendre à la façon dont est accordé la base de données, les indices que vous avez sur les tables et la portée des données. Pour vraiment "prouver" un modèle de données, je suis un grand fan de remplir les tables avec un tas de données, et de l'interroger, voir ce qui se passe, c'est le seul vrai moyen pour vous de valider la performance, ou son absence pour une application.

+0

Y a-t-il de bons outils pour mesurer ce genre de chose? – Ciel

+0

SQL Profiler qui fait partie de SQL Server est un bon outil pour commencer. –

Questions connexes