2011-12-20 4 views
4

Я создал простое приложение на основе RavenDB, где у меня есть 3000 документов, состоящих из 15 свойств строки и int. Одним из свойств (CType) имеет такое же значение для всех документов, и я использую это поле таким образом, чтобы загрузить все документы в массив с помощью запроса Lucene:Проблема с производительностью с RavenDB

var store = new DocumentStore { Url = "http://localhost:8080", DefaultDatabase = "GIS" }; 
store.Initialize(); 

using (var session = store.OpenSession()) 
{ 
    var school = session.Advanced.LuceneQuery<School>() 
     .Where("CType:School") // all documents have CType = "School" 
     .Take(5000) 
     .ToArray(); 

Этот код работает в нем, что читает все 3000 документов в массиве, однако для завершения загрузки требуется 5 секунд или более.

Есть ли способ сделать это быстрее?

ответ

3

Ну, вы выполняете запрос, который должен получить 5000 предметов, отправить их по сети и десериализовать их из Json в школу POCO. 1000 штук в секунду не так уж плохо, для всего этого.

Сказав это, что будет со списком предметов Школы, которые вы вернетесь? Как правило, вам не нужно использовать 5000 предметов за 1 раз, поэтому у RavenDB есть paging built-in

+0

Причина для загрузки всех документов в массив заключается в том, что мне нужно искать по всем строковым свойствам каждого документа для определенных шаблонов. Первоначально я экспериментировал с запросом Lucene, чтобы выполнить поиск по шаблону, но не имел никакого успеха, чтобы это работало. Лучшая аналогия будет делать что-то похожее на синтаксис SQL LIKE. –

+1

Это действительно неэффективно, чтобы сделать это таким образом, когда вы можете сделать этот запрос непосредственно в Lucene. Можете ли вы опубликовать вопрос о списке рассылки RavenDB http://groups.google.com/group/ravendb/, показывая проблему, с которой вы столкнулись с запросом? –

+0

Спасибо, я соберу описание проблемы с запросом и отправлю его в список рассылки RavenDB. –

1

Вы на самом деле используете динамический индекс, чтобы было так, что в первый раз вы получите его с помощью динамического индекса , И вы действительно должны рассмотреть возможность фильтрации на сервере, а не на клиенте.

Смежные вопросы