2011-12-20 67 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反序列化成一個School POCO。對於這一切,每秒1000個項目並不是那麼糟糕。

話雖如此,那麼您回來的學校物品列表將會怎樣?一般來說,你不需要在1次中使用5000個項目,這就是爲什麼RavenDB有paging built-in

+0

將所有文檔加載到數組中的原因是因爲我需要在特定模式下搜索每個文檔的所有字符串屬性。最初,我嘗試使用Lucene查詢來進行模式搜索,但沒有成功實現這一功能。最好的比喻是做類似於SQL'LIKE'語法的東西。 – 2011-12-20 16:44:04

+1

當你可以直接在Lucene中完成這種查詢時,這樣做效率很低。您能否在RavenDB郵件列表http://groups.google.com/group/ravendb/上發佈問題,顯示您在查詢時遇到的問題? – 2011-12-20 18:05:04

+0

謝謝,我將把我的查詢問題的描述放在一起,並將其發佈到RavenDB郵件列表。 – 2011-12-20 22:39:00

1

你實際上使用動態索引來做到這一點,所以它很可能是你第一次使用動態索引。 你應該真的考慮在服務器端進行任何過濾,而不是在客戶端進行過濾。