2011-11-03 55 views
5

我们已经查看了问题以及RavenDb文档。有一点在RavenDb Index Replication Docs,但似乎没有任何指导如何/何时/在哪里创建IndexReplicationDestination如何安装和设置RavenDb索引复制

我们的用例非常简单(这是一个秒杀)。我们目前创建新的对象(Cows)并将它们存储在Raven中。我们有几个使用LINQ动态创建的查询(例如from c in session.Query<Cows> select c)。

现在我看不到应该在哪里定义要复制的索引。有任何想法吗?我已经得到了束保持并把它添加到服务器目录(我假设它应该在哪里RavenDB.1.0.499\server\Plugins包含RavenDB.1.0.499\server Raven.Server.exe)

编辑:感谢Ayende ...下面的答案并在ravendb团体帮助。当时有一个facepalm。不管这里有一些细节可以帮助别人。它确实很容易,而且确实是'正常工作':

a)确保插件被拾取。您可以在统计信息中查看这些信息 - 可通过/ localhost:8080/stats url进行查看(默认设置)。您应该在'Extensions'中看到有关IndexReplication包的条目。

如果不存在,保证了的DLL(包和服务器)的版本相同

b)确保您要复制已创建的索引。它们可以通过客户端API或HTTP API创建。

客户端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(在工作室): //奶牛/列表 docs.Cows 。选择(Q =>新的{状态= q.Status})

c)创建复制文档。这里的线索是DOCUMENT。像存储的所有内容一样,它也是一个文档。所以,创建必须存储在DB后:

VAR replicationDocument =新Raven.Bundles.IndexReplication.Data.IndexReplicationDestination { ID为 “乌鸦/ IndexReplication/Cows_List”,ColumnsMapping = {{ “状态”,“状态“}}, ConnectionStringName =”Reports“,PrimaryKeyColumnName =”Id“, TableName =”cowSummaries“ }; session.Store(replicationDocument); sesson.SaveChanges();

d)确保您在客户端(例如MVC应用程序或控制台)

E)创建RDBMS架构如下。我有一个表中的 'cowReports':

CREATE TABLE [DBO] [cowSummaries]( [ID]为nvarchar NULL, [状态] NCHAR NULL)

我的具体问题并没有添加索引文件到商店。我知道。 facepalm。当然应有尽有是一个文件。奇迹般有效!

回答

1

您需要定义两件事情。 a)将文档转换为行形状的索引。 b)一个告诉RavenDB连接字符串名称,表名和列映射的文档

+0

感谢Ayende - 这是我发现的两件事情中的一个棘手与RavenDb建立(其余的一直非常简单) 1)何时/何时创建ReplicationDocument,是否每次会话一次?或应用程序?我猜应用程序...)2)会话管理与ASP.Net(我不想注入IDocumentStore - 这是一个广泛的接口存根或模拟) - 我宁愿有一个对话(如nHiberante)。 – penderi

+0

确定会话已排序(我正在使用与nHibernate/Monorail类似的实践 - 将会话存储在HttpContext中)。 但是恐怕我还不清楚何时/如何创建rteplication文档和索引...任何指导赞赏。 – penderi

+0

另外....我使用动态索引进行查询。我将在哪里设置复制的专用索引?我假设同一个地方。这是一个每个Web应用程序每个场景一次(我在想app_start)? – penderi