2011-06-29 5 views
3

Je souhaite rechercher de nouveaux documents dans ma base de données Raven. Quelle est la manière recommandée de faire cela? Puis-je utiliser l'IndexTimestamp ou puis-je me fier à l'ordre des documents? Je suppose que je veux soit faire en deux étapes: 1. Vérifiez s'il y a quelque chose de nouveau, si oui: 1.1. Obtenez les derniers documents XConseil sur l'interrogation de nouveaux documents dans RavenDB

Ou en une seule étape: Obtenez les derniers documents X et faites-les retourner ou dites-moi qu'il n'y a rien de nouveau selon l'argument que j'ai envoyé.

FYI: Je n'ai aucun objet CLR correspondant aux documents.

+2

Est-ce votre architecture telle que vous êtes obligé d'interroger la base de données ? Une autre approche que vous pouvez prendre est d'écouter écrire des événements dans la base de données et de prendre des mesures à ce sujet. –

+0

LinusK, Vous pourriez vouloir regarder et voir comment nous faisons cela avec l'utilitaire contrebandier. Il fait explicitement exactement ce que vous voulez, en obtenant les derniers documents depuis le dernier vu. Le code pour cela est ici: https://github.com/ravendb/ravendb/blob/master/Raven.Smuggler/Smuggler.cs –

Répondre

1

Je ne l'interrogerais pas, mais j'utiliserais l'API Changes incluse avec RavenDB pour obtenir le flux continu de documents de RavenDB.

Vérifiez la API Modifications ici http://ravendb.net/docs/2.0/client-api/changes-api

Personnellement, j'utiliser les changements API avec une sorte de message Bus (RabbitMQ) pour vous assurer que chaque changement est traité et résiliente.

Si vous souhaitez toujours interroger, créez simplement un index avec votre date et trier par ordre décroissant.

var result = session.Query<Orders>() 
        .OrderByDescending(x => x.Created) 
        .Take(10) 
        .ToList(); 

Si vous avez besoin de traiter tous les documents, vous pouvez créer des documents de marqueurs qui incluent l'identifiant du document que vous obtenez et assurez-vous qu'ils ne sont pas traitées.

Pour cela:

marker id : polling/processed/order/1 

Indice

from o in orders 
let processed = LoadDocument("polling/processed/" + o.Id) 
select new { 
    WasProcessed = processed != null, 
    Created = o.Created 
} 

Quelques options pour vous, l'espoir qui aide :)

Questions connexes