2017-08-04 34 views
1

我使用塞春數據可分頁不帶彈簧的數據塞工作

compile 'com.aerospike:spring-data-aerospike:1.0.2.RELEASE' 
compile 'com.aerospike:aerospike-client:3.3.4' 
compile 'com.aerospike:aerospike-helper-java:1.2' 

當我試圖用分頁我得到的所有記錄,而不只是一個頁面與特定的記錄集工作

Page<Account> findByGender(String gender, Pageable pageable); 

此方法下接口

public interface AccountRepo extends AerospikeRepository<Account, UUID> 

列出並且通過使性別訪問它和可分頁

Pageable pageable = new PageRequest(page, pageSize); 
+1

如果有缺陷或缺少功能,您應該在[aerospike/spring-data-aerospike]上打開一個新的[issue](https://github.com/aerospike/spring-data-aerospike/issues)( https://github.com/aerospike/spring-data-aerospike)GitHub上的repo。 –

+1

我試過了,但是Jira鏈接在他們的github頁面被破壞,他們提到了stackoverflow,所以我在這裏也發佈了它 – Anunay

+1

請點擊此鏈接:https://github.com/aerospike/spring-data-aerospike/issues/new這應該工作。 GitHub有自己的問題系統,它不使用JIRA。 –

回答

1

Aerospike是一個分佈式數據庫,這意味着掃描和查詢被髮送到集羣中的所有節點。每個節點都與其他節點共享,所以它們不協調訂單或返回的記錄。同樣,在節點內掃描和查詢是遍佈核心的多線程操作。這是每次結果順序不同的另一個原因。

分頁的解決方法是在客戶端緩存整個結果集,然後遍歷它們。在RDBMS中,在服務器端分配內存用於排序和緩存結果。在分佈式RDBMS中,需要指定一個特定的節點,所有結果都從其他節點移動到該節點,並在那裏進行緩存,排序和緩存。 Aerospike的設計理念是不以這種方式浪費服務器資源,而是將該操作的責任轉移到應用程序端,讓服務器集羣以非常低的延遲處理許多請求。

在您的應用程序中,您應該對結果進行緩衝,排序和緩存,並對此緩存進行分頁。實際上,您可以將這些結果緩存到Aerospike中(例如,放入內存中的命名空間),並使用有限的TTL。

+1

我知道排序是我沒有擺脫這一點,但沒有在服務器端實現的分頁有一種方法可以確保我能夠讀取所有記錄,而無需在每次讀取時進行查找。是否有讀取批量記錄的選項,因爲在單個調用中獲取太多數據可能會很困難 – Anunay

+1

是的,批量讀取可以實現這一點。對於[AerospikeClient.get()]的Java客戶端(http://www.aerospike.com/apidocs/java/com/aerospike/client/AerospikeClient.html#get(com.aerospike.client.policy.BatchPolicy, %20com.aerospike.client.Key []))和一個鍵列表。實際上,請注意,當RDBMS執行掃描時,它也會遍歷所有行。 –