2010-03-14 3 views
1

J'ai des objets qui ont une propriété DateTime, comment puis-je interroger l'objet le plus ancien?Comment interroger l'objet le plus ancien de db4o?

Après avoir posé sur le forum db4o, je reçois la réponse:

Il est assez facile: créer un tri SODA-Query and prendre le premier/dernier objet du ObjectSet résultant. Ne pas itérer le ObjectSet (donc les objets ne seront pas activés), il suffit de prendre l'objet requis directement via #ObjectSet.Get(index). Veuillez noter que db4o ne prend en charge qu'un nombre limité de tri performants (alphabétique, nombres, identifiants d'objet) dans l'exécution des requêtes, vous devrez peut-être stocker votre DateTime en millisecondes pour obtenir de bonnes performances.

Répondre

1

tout d'abord votre objet a besoin de garder une trace du temps lui-même, donc cela dépend de vos besoins:

class Customer 
{ 
    public DateTime DateSignedUp {get; private set;} 
    // ... 
} 

Maintenant, vous pouvez interroger l'objet de quelque manière que vous le souhaitez, en utilisant Linq, SODA, ou des requêtes natives, par exemple

IObjectContainer container = ...; 
Customer oldestCustomer = container.Query<Customer>().OrderBy(p => p.DateSignedUp).First(); 

Cependant, il y a un ensemble de pièges:

  1. Ne pas utiliser DateTime dans votre objet persisté. J'ai eu des problèmes énormes avec eux. Je ne peux pas reproduire le problème de sorte que je ne puisse pas le signaler pour le moment, mais je ne peux personnellement pas recommander leur utilisation. Utilisez un long à la place et copiez les graduations du DateTime respectif. Stocker toutes les heures en UTC, sauf si vous faites explicitement référence à l'heure locale, par exemple dans le cas des horaires d'autobus.
  2. Mettre un index sur le temps
  3. L'opération de commande peut être très, très lente pour de grandes quantités d'objets en raison de issue COR-1133. Si vous avez une grande quantité d'objets et que vous connaissez l'âge approximatif de l'objet, essayez d'imposer une contrainte where, car ce sera rapide. See also my blogpost concernant ce problème de performance, qui peut devenir très ennuyeux déjà à ~ 50-100k objets.

Best,
Chris

+0

merci, Chris, heureux de savoir à ce sujet. Je ne vous ai pas vu sur Skype, et je vous suis maintenant sur Twitter. – Benny

Questions connexes