有谁知道任何文档数据库是否提供了良好的搜索功能?我看到RavenDb在某种程度上使用Lucene.net,但我正在寻找像Truffler.net客户端api给你的更集成的搜索体验.他们在Elasticsearch之上构建了一个.net客户端,它提供了很好的搜索功能.
我认为如果任何文档数据库客户端可以直接通过其客户端api提供类似的功能,那将是一个杀手级功能,但我不确定这是否可行.
我在单元测试中做了一些性能工作,并想知道是否可以访问我的RavenDb会话的统计信息(类似于NHibernate会话统计信息)?
我想知道诸如总查询计数和到服务器的次数之类的事情.
我正在按照教程,安装RanvenDB嵌入并编写:
public static IDocumentStore archives =
new EmbeddableDocumentStore { DataDirectory = "~/DataStore" };
Run Code Online (Sandbox Code Playgroud)
然后我让VS找到EmbeddableDocumentStore在哪里,我添加:
using Raven.Client.Embedded;
Run Code Online (Sandbox Code Playgroud)
没有错误,一切都很好.然后我建立:
Archives.cs(10,20):错误CS0234:命名空间"Raven.Client"中不存在类型或命名空间名称"Embedded"(您是否缺少程序集引用?)
编译完成 - 1个错误,0个警告
现在它是错误的,没有嵌入式......
如果我删除package.config并再次运行安装Ravendb Embedded,它将再次变为绿色(没有错误)但是在我运行build之后...
怎么修呢?
(测试不同版本:相同结果)
我已经阅读了很多关于如何模拟RavenDb的问题.有一个共同的答案:"不要"
这让我陷入了一种奇怪的境地.模拟接口的最重要原因之一是测试我的代码如何对错误做出反应.
如果您无法模拟可能导致错误的对象,则注入错误会非常复杂.
我在这里想错了方向????
// LG
我有一个服务类UserService,它获取使用AutoFac注入的IDocumentStore实例.这工作正常,但现在我正在看这样的代码:
public void Create(User user)
{
using (var session = Store.OpenSession())
{
session.Store(user);
session.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
写入db的每个操作都使用相同的结构:
using (var session = Store.OpenSession())
{
dosomething...
session.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
消除这种重复代码的最佳方法是什么?
Take(300)lambda 封顶了它.我该如何避免这种情况?
谁能告诉我哪些选项最适合我的情况?
以下是我发现的服务器配置选项:
这是我在代码选项中找到的:
我很清楚这个默认设置没有被尊重:
乌鸦/ MemoryCacheLimitMegabytes
RavenDB服务器内部文档缓存的最大大小(MB). 默认值:系统总内存的50%减去Esent缓存的大小.
在我的服务器上,使用build 2330,没有设置任何自定义配置,Raven.Server.exe占用了95%的可用内存!
编辑:我只能在执行重读(并且没有写入)时在测试环境中重现这一点.
在我的C#应用程序中,我有一组对象,其int Order属性范围从1到n.
当我喜欢这样的时候:
var listings = session.Query<Listing>().Where(x => !x.IsDeleted && x.CategoryId == category.Id && x.WorkflowStatus == WorkflowStatus.Published).OrderBy(x => x.Order);
Run Code Online (Sandbox Code Playgroud)
我得到了一系列列表,但没有按正确的顺序100%.按顺序,顺序如下:
0, 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, 21, 22, 23, 24, 25, 26, 28, 29, 3, 30, 31, 32, 33, 4 ....
Run Code Online (Sandbox Code Playgroud)
知道为什么OrderBy不完全应该这样做吗?
我打算使用RavenDB作为我的数据存储来构建单页面应用程序(SPA).
我想从SPA部分的ASP.NET Hot Towel模板开始.
我将删除EntityFramework/WebApi/Breeze组件,并用RavenDB替换存储和ServiceStack来构建后端API.
在RavenDB之上使用任何类型的存储库或其他抽象并且直接在控制器内部(在MVC应用程序中)使用RavenDB API时,大多数当前的观点似乎都不屑一顾
我假设我在使用Raven和ServiceStack时应该遵循同样的智慧,并直接在我的服务实现中对IDocumentSession进行调用.
我担心的是,通过遵循这条路径,我的服务实现似乎会变得相当臃肿.我似乎经常需要多次编写相同的代码,例如,如果我需要更新几个不同的Web服务端点中的用户文档.
我似乎也需要从我的应用程序的其他(未来)部分访问Raven.例如,我可能需要添加一个控制台应用程序,以便将来处理队列中的作业,而这部分应用程序可能需要访问Raven中的数据...但从一开始,我唯一的途径就是通过Raven Web服务API.我是否只打算从这个理论控制台应用程序调用web api?如果它们可能在同一硬件上运行,那么效率似乎很低.
任何人都可以提供有关如何在我的网络服务和其他地方有效利用Raven的建议,同时仍然遵循使用此文档存储的最佳实践?创建一个直接处理针对raven的调用的中间业务逻辑层似乎很实际......允许我的webservices调用此层中的方法.这有意义吗?
编辑
任何人都可以提供类似架构的最新样本吗?
我正在开发一个使用backbone.js的应用程序,用于大多数前端逻辑,并考虑使用sqlite进行存储,但我遇到了一些并发症,需要切换到另一个NoSQL数据库.
我在ravendb的网站上看到它是用C#创建的,你需要一个.net编译器.大多数文档都是针对ASP MVC类型的应用程序.我不能这样做,因为我们正在开发这个平板电脑应用程序,在客户端没有基于微软的技术(因为我们希望它与android和苹果一起使用)
然而,服务器将是.NET,所以我认为这可能是可行的.只是想知道这是否值得追求,如果有人有使用ravendb的经验?或者我应该去mongodb?
为什么这个代码(尝试)用第二个对象覆盖我的第一个对象?我的第一个对象具体为Id的"StringBasedIdClasses/1",第二个没有提供Id,所以Raven应该生成一个未使用的Id,不应该吗?
var quickStore = new EmbeddableDocumentStore() { RunInMemory = true };
quickStore.Initialize();
quickStore.RegisterListener(new DocumentConversionListener()).RegisterListener(new DocumentStoreListener());
using (var session = quickStore.OpenSession())
{
session.Advanced.UseOptimisticConcurrency = true;
var stringIdTest = new StringBasedIdClass()
{
Id = "StringBasedIdClasses/1",
Name = "StringItem1"
};
session.Store(stringIdTest);
session.SaveChanges();
}
using (var session = quickStore.OpenSession())
{
session.Advanced.UseOptimisticConcurrency = true;
var stringIdTest = new StringBasedIdClass()
{
Name = "DidIReplaceYou"
};
session.Store(stringIdTest);
session.SaveChanges();//This fails with a ConcurrencyViolation as I use OptimisticConcurrency and have Etag support on my objects
}
Run Code Online (Sandbox Code Playgroud)
一切都在使用文档存储的一个当前实例.这似乎很基本所以一定要错过一些简单的东西.