[英]Server-side paging possible?
在Java應用程序中,我使用Spring-Data通過REST綁定訪問Neo4j數據庫。
用作上下文的spring.xml包含以下行:
<neo4j:config graphDatabaseService="graphDatabaseService" />
<neo4j:repositories base-package="org.example.graph.repositories"/>
<bean id="graphDatabaseService"
class="org.springframework.data.neo4j.rest.SpringRestGraphDatabase">
<constructor-arg index="0" value="http://example.org:1234/db/data" />
</bean>
我的存儲庫非常簡單:
public interface FooRepository extends GraphRepository<Foo> {
}
現在,我想循環一些Foo
:
for (Foo foo : fooRepository.findAll(new PageRequest(0, 5))) //...
但是,此請求的性能很糟糕:完成需要400秒(!)。
經過一些調試后,我發現Spring-data生成以下查詢:
START `foo`=node:__types__(className="org.example.Foo") RETURN `foo`
然后看起來好像在客戶端上進行了分頁,並且所有Foo
(超過100,000)都被傳輸到客戶端。 使用Web界面向Neo4j服務器發出上述查詢時,大約需要60秒。 但是,如果我手動添加“LIMIT 5”,則執行時間減少到大約0.5秒。
我做錯了什么,以便spring-data不使用服務器端,CYPHER分頁?
根據編程模型
通過使用REST API轉發這些調用,可以在服務器端高效執行遍歷和查詢等昂貴的操作。
或者這是否排除了分頁?
在這種情況下我還有哪些其他選擇?
您可以執行以下操作來處理此服務器端。
例如
start john=node:users("name:pangea")
match john-[:HAS_SEEN]-(movie)
return movie
order by movie.name?
skip 20
limit 10
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.