我在我的应用程序中使用了RavenDB-Embedded 2.0.2230,在不同的程序集中与ASP .Net Web API进行了交互.
当我UseEmbeddedHttpServer = true在文档存储上设置时,第一次向RavenDB发送请求时,它会正确执行,但是当我第二次尝试时,我的应用程序会显示Raven Studio.
当我删除UseEmbeddedServer设置时,我的应用程序运行没有任何问题.
我的RavenDB在数据层中配置了以下代码:
this.documentStore = new EmbeddableDocumentStore
{
ConnectionStringName = "RavenDB",
UseEmbeddedHttpServer = true
}.Initialize();
Run Code Online (Sandbox Code Playgroud)
并Web.config在服务层中实现这些设置:
<connectionStrings>
<add name="RavenDB" connectionString="DataDir=~\App_Data\RavenDatabase" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
有没有我错过的设置?
我需要将任何设置应用于将Raven Studio指向另一个端口吗?
对于某些读/写密集型应用程序,我们正在研究具有故障转移群集的文档数据库存储解决方案.
我们将每秒平均写入40K并发写入数据库(峰值可能达到70,000) - 并且可能有大约几乎相同数量的读取发生.
我们还需要一种机制让db通知新写入的记录(db级别的某种触发器).
在正确选择文档数据库和相关容量规划方面,什么是一个好的选择?
更新
关于期望的更多细节.
在我正在工作的项目中,客户端有一个旧的大型(TB级)RDBMS.所有类型的查询都很慢,没有时间来修复/重构模式.我已经确定了需要优化的常见查询集.该集分为两部分:全文和元数据查询.
我的计划是从数据库中提取数据并将其分配到两个不同的存储系统中,每个存储系统都针对特定查询集进行了优化.
对于全文搜索,Solr是最有意义的引擎.它的分片和复制功能使其非常适合一半的问题.
对于元数据查询,我不确定要采取的路线.目前,我正在考虑使用具有极度非规范化模式的RDBMS,该模式表示来自"权威"RDBMS的数据的特定子集.但是,与已经包含它们的Solr相比,我的客户担心这种子系统缺少分片和复制以及设置这些功能的难度/复杂性.在这种情况下,元数据采用整数,日期,bool,位和字符串的形式(最大大小为10chars).
是否有一个数据库存储系统具有内置的分片和复制功能,可能对查询所述元数据特别有用?也许一个没有sql的解决方案提供了一个很好的查询引擎?
请照亮.
添加/回应:
Solr可用于元数据,但元数据是易失性的.因此,我必须经常提交索引.这会导致搜索速度非常快.
所以我想说我有3件水果,苹果和橘子.Fruit是Apple和Orange的抽象基类.当我使用session.Store(myApple)时,它将它放入Apples集合中.myOrange存储在Oranges集合中.说得通.
我可以告诉Raven我想要一个可以容纳苹果或橘子的水果系列吗?Mongodb允许这样做,因为它允许我明确指定集合名称.RavenDB集合文档说:
预期的使用模式是集合用于对具有相似结构的文档进行分组,尽管这不是必需的.从数据库的角度来看,集合只是一组共享相同实体名称的文档.
我希望它是这样的:session.Store <Fruit>(myApple),或session.Store("Fruits",myApple)
有任何想法吗?谢谢.
我的实体是:
class Resource
{
string Name;
string EmployeeId;
}
Run Code Online (Sandbox Code Playgroud)
如何查询多个员工的资源?我试过这个:
Resource[] FindResourcesByEmployees(string[] employeeIds)
{
return this.Session.Query<Resource>()
.Where(r => employeeIds.Contains(r.EmployeeId))
.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
但是,这给了我NotSupportedException:不支持的方法:包含.然后我尝试了以下方法:
Resource[] FindResourcesByEmployees(string[] employeeIds)
{
return this.Session.Query<Resource>()
.Where(r => employeeIds.Any(v => v == r.EmployeeId))
.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
抛出NotSupportedException:不支持表达式类型:System.Linq.Expressions.TypedParameterException.
在SQL中它将是这样的:
SELECT * FROM resource WHERE employeeid IN (1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何在RavenDB中执行此查询?
在我的单元测试中,我设置每个测试都有一个完全空的IDocumentSession.我是这样做的:
[SetUp]
public void SetUp()
{
_store = new EmbeddableDocumentStore
{
RunInMemory = true
};
_store.Initialize();
Session = _store.OpenSession();
}
Run Code Online (Sandbox Code Playgroud)
但我认为这可能是我的测试有点慢的原因.我想知道是否有一个简单的命令来删除数据库中的所有文档.
我想要知道的是:如果我能做到这一点,以及它是否会提高性能.
可能重复:
运行集成测试时嵌入式MongoDB
我想使用In-Memory模式进行单元测试,是否存在像RavenDB这样的In-Memory模式?
我知道这个问题的变体之前已被问过(甚至是我),但我仍然不明白这个问题......
据我所知,通过执行以下操作,可以检索比128默认设置更多的文档:
session.Advanced.MaxNumberOfRequestsPerSession = int.MaxValue;
Run Code Online (Sandbox Code Playgroud)
我已经知道WHERE子句应该是一个ExpressionTree而不是Func,所以它被视为Queryable而不是Enumerable.所以我认为这应该有效:
public static List<T> GetObjectList<T>(Expression<Func<T, bool>> whereClause)
{
using (IDocumentSession session = GetRavenSession())
{
return session.Query<T>().Where(whereClause).ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这只返回128个文档.为什么?
注意,这是调用上述方法的代码:
RavenDataAccessComponent.GetObjectList<Ccm>(x => x.TimeStamp > lastReadTime);
Run Code Online (Sandbox Code Playgroud)
如果我添加Take(n),那么我可以获得尽可能多的文档.例如,这会返回200个文档:
return session.Query<T>().Where(whereClause).Take(200).ToList();
Run Code Online (Sandbox Code Playgroud)
基于所有这些,似乎检索数千个文档的适当方法是设置MaxNumberOfRequestsPerSession并在查询中使用Take().是对的吗?如果没有,应该怎么做?
对于我的应用程序,我需要检索数千个文档(其中包含非常少的数据).我们将这些文档保存在内存中,并用作图表的数据源.
**编辑**
我尝试在Take()中使用int.MaxValue:
return session.Query<T>().Where(whereClause).Take(int.MaxValue).ToList();
Run Code Online (Sandbox Code Playgroud)
然后返回1024.唉.我如何获得超过1024?
**编辑2 - 显示数据的示例文档**
{
"Header_ID": 3525880,
"Sub_ID": "120403261139",
"TimeStamp": "2012-04-05T15:14:13.9870000",
"Equipment_ID": "PBG11A-CCM",
"AverageAbsorber1": "284.451",
"AverageAbsorber2": "108.442",
"AverageAbsorber3": "886.523",
"AverageAbsorber4": "176.773"
}
Run Code Online (Sandbox Code Playgroud) 我在.NET MVC 5应用程序中工作.我不想使用Entity Framework.我想验证RavenDB数据库.在我看来,我想要替换UserManager帐户控制器附带的.我想我可以重写所有UserManager函数来使用我的数据库,除了我不理解该ClaimsIdentity对象.
在该SignInAsync方法中,有一个调用UserManager.CreateIdentityAsync(...).我知道它会返回一个ClaimsIdentity对象.我不知道的是如何自己创建一个ClaimsIdentity对象.
我看到它有4个属性Actor,BootstrapContext,Claims和Label.我不知道这些属性用于什么,我不知道如何正确生成它们.我认为正确生成它们非常重要,因为它是如何生成身份验证cookie的.
我在这里查看了ClaimsIdentity对象的解释,但这并没有真正帮助我理解.
如果我能看到代码CreateIdentityAsync(),那可能会有所帮助.
如果我发现这一切都错了,请告诉我.否则,如果有人可以指出我如何生成ClaimsIdentity对象,那将会有所帮助.
ClaimsIdentity identity = new ClaimsIdentity
{
Actor = ????,
BootstrapContext = ?????,
Claims = ?????,
Label = ?????
}
Run Code Online (Sandbox Code Playgroud) authentication claims-based-identity ravendb katana asp.net-mvc-5
我试图在ASP.NET MVC 5应用程序中安装RavenDB.Embedded,但我有这种依赖性错误:
PM> Install-Package RavenDB.Embedded
Attempting to resolve dependency 'RavenDB.Database (= 2.5.2750)'.
Attempting to resolve dependency 'System.Spatial (? 5.2)'.
Attempting to resolve dependency 'WindowsAzure.Storage (? 2.0)'.
Attempting to resolve dependency 'Microsoft.WindowsAzure.ConfigurationManager (? 1.7.0.0)'.
Attempting to resolve dependency 'Microsoft.Data.OData (? 5.0.2)'.
Attempting to resolve dependency 'Microsoft.Data.Edm (= 5.0.2)'.
Attempting to resolve dependency 'System.Spatial (= 5.0.2)'.
Install-Package : Updating 'System.Spatial 5.2.0' to 'System.Spatial 5.0.2' failed. Unable to find a version of 'RavenDB.Database' that is compatible with 'System.Spatial 5.0.2'.
At line:1 char:1 …Run Code Online (Sandbox Code Playgroud)