Время запроса в RavenDB слишком велико - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть пример для тестирования времени query в RavenDB.Поэтому я использую Linq до query и StopWatch для получения времени.

Но когда я запускаю свой код, время кажется слишком длинным (это 2401 ms), поэтому я пытаюсь выполнить запрос по Ranven Studio, и в результате время просто принимает 1 ms.Я не знаю, почему это так сильно отличается.

Ps: В моей базе данных есть 200 000 документов, и для этого у меня есть indexes, конечно.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Threading.Tasks;
using Raven.Client.Documents;
using Raven.Client.Documents.BulkInsert;

namespace ConsoleApplication6
{
    public class Customer
    {
        public string Id { get; set; }
        public string Name { get; set; }
    }

    public class SupportCall
    {
        public string Id { get; set; }
        public int Cost { get; set; }
        public string CustomerId { get; set; }
        public DateTime StartDay { get; set; }
        public DateTime EndDay { get; set; }
        public string Issue { get; set; }
    }

    internal class Program
    {
        private static char[] _buffer = new char[6];
        private static string RandomName(Random rand)
        {
            _buffer[0] = (char)rand.Next(65, 91);
            for (int i = 1; i < 6; i++)
            {
                _buffer[i] = (char)rand.Next(97, 123);
            }
            return new string(_buffer);
        }
        static void Main(string[] args)
        {
            using (var store = new DocumentStore
            {
                Urls = new[] { "http://localhost:8080" },
                Database = "Test"
            }.Initialize())
            { 
                using (var session = store.OpenSession())
                {
                    var sp = Stopwatch.StartNew();
                    SupportCall supportCall = session.Query<SupportCall>()
                        .Include<SupportCall>(s => s.CustomerId)
                        .Where(s => s.Cost == 21821).FirstOrDefault();
                    Customer customer = session.Load<Customer>(supportCall.CustomerId);
                    sp.Stop();
                    Console.WriteLine(sp.ElapsedMilliseconds);
                }
                Console.ReadKey();
            }
        }
    }
}

1 Ответ

0 голосов
/ 11 декабря 2018

Можете ли вы сделать один и тот же запрос (на самом деле, лучше использовать другие параметры, чтобы избежать затрат на кеширование) и проверить еще раз?

Самая распространенная причина того, что это занимает так много времени, заключается в том, что вы платитевпервые подключение и установление настроек хранилища документов.Странная часть здесь заключается в том, что вы делаете это на локальном хосте, поэтому я ожидаю, что это будет очень быстро, даже при первоначальном вызове.

Вы можете использовать Fiddler (измените URL на: "http://localhost.fiddler:8080" чтобы он его запечатлел), чтобы увидеть, сколько стоит сеть.

Я видел подобные вещи из-за утилит антивирусной проверки и проверки пакетов.

...