标签: ravendb

RavenDB查询响应时间长,而在服务器上处理速度非常快

Raven.Server启动并绑定到端口8022.我按以下方式初始化DataStore:

        var store = new DocumentStore() { Url = "http://localhost:8022" };
        store.Initialize();
Run Code Online (Sandbox Code Playgroud)

然后我正在做这样的查询:

        using (var session = store.OpenSession())
        {
            Stopwatch watch = new Stopwatch();
            watch.Start();

            var result = session.LuceneQuery<Item>("Raven/DocumentsByEntityName")
                .WhereEquals("Tag", "Items")
                .ToList();

            watch.Stop(); // watch.ElapsedMilliseconds == ~550 ms

            return result;

        }
Run Code Online (Sandbox Code Playgroud)

并且watch.ElapsedMilliseconds总是~550毫秒.但是当我查看RavenDB控制台时,我看到该查询在3毫秒内处理完毕:

Request # 170: GET     -    3 ms - 200 - /indexes/Raven/DocumentsByEntityName?query=Tag%253A%255B%255BItems%255D%255D&start=0&pageSize=128
Run Code Online (Sandbox Code Playgroud)

因此,大约99.5%的时间不在RavenDB中.问题是什么?(RavenDB 147)

当我切换到RavenDB的自托管(即作为嵌入式客户端)时,一切都还可以(~3ms).

为了澄清该问题不在网络,http调试器,DNS服务器等.我也测试了这个:

            Stopwatch watch = new Stopwatch();
            watch.Start();

            WebClient client = new WebClient();
            var result = client.DownloadString("http://127.0.0.1:8022/indexes/Raven/DocumentsByEntityName?query=Tag%253A%255B%255BItems%255D%255D&start=0&pageSize=128");

            watch.Stop(); // watch.ElapsedMilliseconds == ~3-10ms
Run Code Online (Sandbox Code Playgroud)

快速.但切换到Raven.Client.Lightweight会增加响应时间200次(550-600 …

.net ravendb

2
推荐指数
1
解决办法
469
查看次数

不包含在RavenDb中的子列表中

我有实体.

class Something{
   public List<string> Tags {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

现在我需要查询没有给定标签的所有实体.

var res = s.Query<Something>()            
           .Where(x => !x.Tags.Any(t => t == "Test3"));
Run Code Online (Sandbox Code Playgroud)

失败:

未处理的异常:System.InvalidCastException:无法将类型为"System.Linq.Expressions.MethodCallExpressionN"的对象强制转换为"System.Linq.Expressions.MemberExpression".

普通查询也不起作用:

var res = s.Advanced.LuceneQuery<Something>()
           .Where("-Tags:Test3");
Run Code Online (Sandbox Code Playgroud)

......它根本不返回任何东西.

怎么写这样的查询?

c# ravendb

2
推荐指数
1
解决办法
710
查看次数

RavenDb与RDBMS水平扩展

与传统的RDBMS相比,使RavenDb(作为典型的NoSQL文档数据库)水平扩展功能的因素有哪些?

relational-database nosql ravendb

2
推荐指数
1
解决办法
305
查看次数

如何在RavenDB中实现文档的原子并发读取?

我有以下问题,我在无状态REST服务器中使用RavenDB实现队列抽象.

假设我有2个REST调用A和B.

当呼叫A发生时,我在队列中查询最后一个项目(项目A)并给它打电话A.

如果呼叫B与呼叫A同时被呼叫 - 这可能发生在REST呼叫中,我需要阻止程序给呼叫B提供与A相同的项目,意味着项目A应该被呼叫A"锁定".

这里的标准多线程保护是一个简单的锁,如何将这个想法转化为我的RavenDB和REST的情况?

PS我使用Nancy作为REST服务器

queue rest concurrency thread-safety ravendb

2
推荐指数
1
解决办法
569
查看次数

Http 401在AppHarbor上使用jquery查询RavenDB

我在AppHarbor中使用RavenDB来使用jQuery查询索引.我得到了一个未经授权的Http 401.如果我使用我的本地连接字符串,一切正常,我想我需要设置RavenDB来接受我指向Appharbor数据库的请求.我用于查询的jquery看起来像这样(queryUrl有效):

    function search(queryUrl) {            
        $.ajax({
            url: queryUrl,
            dataType: 'jsonp',
            jsonp: 'jsonp',                              
            success: function (data) {
                $("#companiesHolder").empty();                    

                $.each(data.Results, function() {
                    $("#companiesHolder").append("<li><hgroup class='title'><h2>" + this.Name + "</h2><h5>" + this.Email + "</h5></hgroup></li>");
                });                                           
            },
            error: function (error, stat, message) {
                alert(stat + ":" + message);
            }
        });
Run Code Online (Sandbox Code Playgroud)

我在浏览器中遇到的错误是:

parsererror:未调用jQuery162024808977324209974_1337018748684

如何在AppHarbor中配置RavenDB以允许我的请求?或者我应该使用jQuery发送一些请求?(也许我应该把我的ApiKey是在documentStore集?)其他的我不这样做,我应该如何处理这个如果某些查询的,我需要的授权,但?

jquery ravendb appharbor

2
推荐指数
1
解决办法
256
查看次数

在RavenDB中插入List <T>的异常

public class Question
    {
        public int Id { get; set; }
        public int? Score { get; set; }
        public string Title { get; set; }
        public List<string> Tags { get; set; }
        public Owner Owner { get; set; }
        public Uri Link { get; set; }
        public bool IsAnswered { get; set; }
    }

public class Owner
    {
        public int? ID { get; set; }
        public String Name { get; set; }
        public int Reputation { get; set; }
        public …
Run Code Online (Sandbox Code Playgroud)

.net c# ravendb

2
推荐指数
1
解决办法
1791
查看次数

按实体名称和上次修改日期搜索

我在RavenDb中存储了许多命令,它们都实现了ICommand.我希望能够搜索上次修改的和Raven-Entity-Name的元数据.我目前正在对每个命令执行多个映射,如下所示:

public class CommandAuditSearch_Index : AbstractMultiMapIndexCreationTask<CommandAuditSearch_Index.Results>
    {
        public class Results
        {
            public string CommandType { get; set; }
            public DateTime LastModified { get; set; }
        }

        public CommandAuditSearch_Index()
        {
            AddMap<NewEmployeeStartCommand>(employees => employees.Select(x => new
            {
                CommandType = MetadataFor(x).Value<string>("Raven-Entity-Name"),
                LastModified = MetadataFor(x).Value<DateTime>("Last-Modified")
            }));

            AddMap<EmployeeLeaverCommand>(employees => employees.Select(x => new
            {
                CommandType = MetadataFor(x).Value<string>("Raven-Entity-Name"),
                LastModified = MetadataFor(x).Value<DateTime>("Last-Modified")
            }));

            Index(results => results.CommandType, FieldIndexing.Analyzed);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我查询如下:

session.Query<CommandAuditSearch_Index.Results, CommandAuditSearch_Index>()
                              .Where(x => x.CommandType == commandType && x.LastModified >= DateTime.Today).OfType<ICommand>().ToList();
Run Code Online (Sandbox Code Playgroud)

我知道Raven中已经内置了一个索引来获取Tag(实体名称)和最后修改日期,但我似乎无法弄清楚如何得到结果,因为上面的索引给了我.

任何人都可以指向我在静态索引的正确方向,我不必为我必须查询的每个命令都有如上所述的多个映射,这样可以将结果作为ICommands列表?

谢谢

稻田

ravendb

2
推荐指数
1
解决办法
1830
查看次数

如何在RavenDB Lucene查询中包含日期条件

我在RavenHQ中有以下索引

from doc in docs 
let Tag = doc["@metadata"]["Raven-Entity-Name"]
where  Tag != null && Tag=="Email"
select new { Tag, LastModified = (DateTime)doc["@metadata"]["LastModified"], DateAdded=doc.DateAdded };
Run Code Online (Sandbox Code Playgroud)

我也确实将DateAdded索引作为分析.我想写一个Lucene查询,其中包含where子句中少于date的条件.

我试过跟随,但它没有用.

Where("DateAdded: [NULL TO 2012-12-31").ToList()
Run Code Online (Sandbox Code Playgroud)

C#在where子句中提供日期的确切方式是什么.

谢谢.

c# linq lucene ravendb

2
推荐指数
1
解决办法
2212
查看次数

RavenDB - 如何查询对象的属性及其子对象

我的问题是根据每个文档的属性及其子代的属性从C#中选择RavenDB文档.假设我们有以下文件:

objekts/1:
  {
  "Code": "1",
  "Children": [
    {
      "Role": "A",
      "Place": "Here"
    },
    {
      "Role": "B",
      "Place": "There"
    }
  ]
}

objekts/2:
{
  "Code": "1",
  "Children": [
    {
      "Role": "A",
      "Place": "There"
    },
    {
      "Role": "B",
      "Place": "Here"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

如何在C#中制定查询以选择具有Code =="1"的对象,并且至少有一个具有Role =="A"且Place =="There"的子项?查询应解析为objekts/2.

另外,我如何制定一个我可以查询的相应Raven索引?

数据类

public class Child
{
    public string Role { get; set; }
    public string Place { get; set; }
}

public class Objekt
{
    public string Code { get; set; }
    public …
Run Code Online (Sandbox Code Playgroud)

.net c# nosql ravendb

2
推荐指数
1
解决办法
783
查看次数

多个嵌套属性的ravendb索引

我问如何基于文档上的两个不同的嵌套属性创建索引.我正在通过C#执行这些查询.

public class LocationCode
{
    public string Code {get;set;}
    public string SeqId {get;set;}
}

public class ColorCode
{
    public string Code {get;set;}
    public string SeqId {get;set;}
}

public class TestDocument
{
    public int Id {get;set;}
    public List<LocationCode> Locations { get; set; }
    public List<ColorCode> Colors { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了各种AbstractIndexCreationTask,Map和Map + Reduce,但无济于事.

我希望能够进行如下查询:

获取所有Locations.Code属性为"USA",AND/OR Colors.Code ="RED"或SeqId属性的文档.我不知道这是否意味着我需要多个索引.通常我会比较嵌套类或Seq上的Code属性,但从不混合.

请有人指出我正确的方向.

非常感谢Phil

c# indexing ravendb

2
推荐指数
1
解决办法
534
查看次数