Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I install and setup the RavenDb index replication

rI've looked at the questions and indeed the RavenDb docs. There's a little at RavenDb Index Replication Docs but there doesn't seem any guidance on how/when/where to create the IndexReplicationDestination

Our use case is very simple (it's a spike). We currently create new objects (Cows) and store them in Raven. We have a couple of queries created dynamically using LINQ (e.g. from c in session.Query<Cows> select c).

Now I can't see where I should define the index to replicate. Any ideas? I've got hold of the bundle and added it to the server directory (I'm assuming it should be in RavenDB.1.0.499\server\Plugins where RavenDB.1.0.499\server contains Raven.Server.exe)

Edit: Thanks Ayende... the answer below and in the ravendb groups helped. There was a facepalm moment. Regardless here's some detail that may help someone else. It really is very easy and indeed 'just works':

a) Ensure that the plugins are being picked up. You can view these in the statistics - available via the /localhost:8080/stats url (assuming default settings). You should see entries in 'Extensions' regarding to the IndexReplication bundle.

If not present ensure the versions of the DLLs (bundle and server) are the same

b) Ensure the index you want to replicate has been created. They can be created via Client API or HTTP API.

Client API:

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);
    }
}

HTTP API (in studio): //Cows/List docs.Cows .Select(q => new {Status = q.Status})

c) create the replication document. The clue here is DOCUMENT. Like everything stored, it too is a document. So after creating it must be stored in the Db :

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

d) Ensure you have the following in the CLIENT (e.g. MVC app or Console)

e) Create the RDBMS schema. I have a table in 'cowReports' :

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

My particular problem was not adding the index document to the store. I know. facepalm. Of course everything is a document. Works like a charm!

like image 768
penderi Avatar asked Nov 14 '22 15:11

penderi


1 Answers

You need to define two things. a) An index that transform the document to the row shape. b) A document that tell RavenDB what is the connection string name, the table name, and the columns to map

like image 63
Ayende Rahien Avatar answered Dec 21 '22 09:12

Ayende Rahien