簡體   English   中英

如何從API端點按需按數據庫逐個獲取產量結果? 是否需要網絡套接字?

[英]How to consume yield results fetched one by one by database on demand from an API end point? Are web sockets needed?

我正在考慮在應用程序中設置一個頁面,每個查詢都可以返回一個不適合內存的結果集,或者查詢所有查詢都非常昂貴。 用戶將點擊“獲取更多”以獲得更多結果。 我想知道我是否可以使用類似Java的yielder( http://benjiweber.co.uk/blog/2015/03/21/yield-return-in-java/ ),如果我需要Web套接字,例如來自Spring( http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html )以便客戶端可以告訴Server推送更多結果。 你也可以舉一個握手的例子..端點uri也會基於某個會話ID嗎? 此外,當像OrientDB / Neo4j這樣的數據庫返回Iterables時,它意味着我們可以保持連接打開並在幾分鍾后獲得下一行沒有問題嗎? 謝謝!

你在談論兩個不同的概念。

分頁

如果您有一個大的結果集,並且需要逐個返回它以避免長查詢時間或高內存要求,那么您將對結果集進行分頁。

要執行此操作,您需要從客戶端點擊“獲取更多”按鈕的另一部分。 每次需要更多時,服務器將從服務器接收請求,並使用一些分頁查詢命中數據庫。

SQL中的示例(例如,第10頁,10個結果/頁):

SELECT * FROM Table OFFSET 100 LIMIT 109

Websockets / Yielder

當服務器是發送數據的服務器時,你需要一個websocket / yielder,換句話說,客戶端不需要更新,它只保持套接字打開,並在它們到來時從服務器接收更新。 這就是Message服務的情況,例如,避免從客戶端進行持續輪詢。

在你的情況下絕對沒有必要的websocket。 你還可以看到我在這里說的一個例子 - > HTTP Stay-Alive和Websockets之間的行為區別是什么?

但是,您可以在后端和數據庫之間建立keep-alive連接,以避免每次用戶需要更多結果時不斷關閉/打開連接。

最后,關於Iorable的問題導致了Neo4j。 Neo4j的結果類型是Map<String,Object>Iterable列表,它表示鍵值對的列表。 這不會使連接保持活動狀態(默認情況下),它只會迭代該特定查詢的返回結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM