2011-11-03 1 views
5

J'ai examiné les questions et les documents RavenDb. Il y a un peu à RavenDb Index Replication Docs mais il ne semble pas y avoir de conseils sur comment/quand/où créer l'IndexReplicationDestinationComment installer et configurer la réplication d'index RavenDb

Notre cas d'utilisation est très simple (c'est un pic). Nous créons actuellement de nouveaux objets (Cows) et les stockons dans Raven. Nous avons créé deux requêtes dynamiquement en utilisant LINQ (par exemple, from c in session.Query<Cows> select c).

Maintenant, je ne vois pas où je devrais définir l'index à répliquer. Des idées? J'ai prise du faisceau et ajouté au répertoire du serveur (je suppose qu'il devrait être dans RavenDB.1.0.499\server\PluginsRavenDB.1.0.499\server contient Raven.Server.exe)

Modifier: Merci Ayende ... la réponse ci-dessous et dans les groupes ravendb aidé. Il y avait un moment facepalm. Peu importe, voici quelques détails qui peuvent aider quelqu'un d'autre. C'est vraiment très facile et en effet «fonctionne»:

a) Assurez-vous que les plugins sont en cours de ramassage. Vous pouvez les voir dans les statistiques - disponibles via l'URL/localhost: 8080/stats (en supposant les paramètres par défaut). Vous devriez voir les entrées dans 'Extensions' concernant le bundle IndexReplication.

Si ne présente pas assurer les versions des DLL (paquet et serveur) sont les mêmes

b) Assurer l'index que vous souhaitez répliquer a été créé. Ils peuvent être créés via l'API client ou l'API HTTP.

API client:

public class Cows_List : AbstractIndexCreationTask<Cow> 
{ 
    public Cows_List() 
    { 
     Map = cows => from c in cows select new { c.Status }; 
     Index(x => x.Status, FieldIndexing.Analyzed); 
    } 
} 

API HTTP (en studio): // Vaches/Liste docs.Cows .Choisir (q => new {Status = q.Status})

c) créer le document de réplication. L'indice ici est DOCUMENT. Comme tout ce qui est stocké, c'est aussi un document. Donc, après avoir créé il doit être stocké dans le Db:

var replicationDocument = new Raven.Bundles.IndexReplication.Data.IndexReplicationDestination { Id = "Raven/IndexReplication/Cows_List", ColumnsMapping = {{ "Status", " Statut "}}, ConnectionStringName =" Rapports ", PrimaryKeyColumnName =" Id ", TableName =" cowSummaries " }; session.Store (replicationDocument); sesson.SaveChanges();

d) Assurez-vous que vous disposez des éléments suivants dans le client (par exemple l'application MVC ou console)

e) Créer le schéma SGBDR. J'ai une table dans 'cowReports'.

CREATE TABLE [dbo] [cowSummaries] ( [Id] NULL nvarchar, [Status] nchar NULL)

Mon problème particulier n'a pas été l'ajout du document d'index au magasin. Je connais. facepalm. Bien sûr tout est un document. Fonctionne comme un charme!

Répondre

1

Vous devez définir deux choses. a) Un index qui transforme le document en forme de ligne. b) Un document qui indique à RavenDB quel est le nom de la chaîne de connexion, le nom de la table et les colonnes à mapper

+0

Merci Ayende - Ceci est l'une des 2 choses que je trouve difficile à établir avec RavenDb (le reste a été très simple) 1) où/quand est-ce que je crée le ReplicationDocument, est-ce une fois par session? ou une application? Je suppose que l'application ... 2) gestion de session avec ASP.Net (je ne veux pas injecter IDocumentStore - c'est une interface large à Stub ou Mock) - je préfère avoir une conversation (comme nHiberante). – penderi

+0

Ok, les sessions sont triées (j'utilise des pratiques similaires à nHibernate/Monorail - stocker la session dans HttpContext). Mais je crains de ne pas savoir quand et comment créer le document et l'index de réplication ... tout conseil apprécié. – penderi

+0

Aussi .... J'utilise des index dynamiques pour l'interrogation. Où devrais-je configurer les index dédiés pour la réplication ?? Je suppose le même endroit. Est-ce une fois par webapp par scénario (je pense à app_start)? – penderi

Questions connexes