ScrollAPI aslında Spring Data Commons ile geliyor. SpringData JPA bu bağımlılığı getirdiği için bir şey yapmaya gerek yok
Offset-based scrolling
OffsetScrollPosition veya WindowIterator sınıfı ile kullanılır. Açıklaması şöyle
Offset scrolling works like pagination, which returns expected results by skipping a certain number of records from a large result. While we only see a portion of the requested results, the server needs to build the full result, which causes additional load.
Örnek
Şöyle yaparız. Ben sadece bazı açıklamalar ekledim. Window sınıfı offsetleri takip ediyor. Kullanım olarak Window sınıfı Iterator gibi. Window.hasNext() çağrısı yapmak lazım
public List<BookReview> getBooksUsingOffset(String rating) {
// To keep track of the position in the result set.
OffsetScrollPosition offset = ScrollPosition.offset();
// Retrieves the first 5 books with the specified rating
Window<BookReview> bookReviews = bookRepository.findFirst5ByBookRating(rating, offset);
List<BookReview> bookReviewsResult = new ArrayList<>();
do {
// Adds each BookReview to result
bookReviews.forEach(bookReviewsResult::add);
// Retrieves the next batch of 5 books with the specified rating
bookReviews = bookRepository
.findFirst5ByBookRating(
rating,
(OffsetScrollPosition) bookReviews.positionAt(bookReviews.size() - 1));
} while (!bookReviews.isEmpty() && bookReviews.hasNext());
return bookReviewsResult;
}
Örnek
Şöyle yaparız. WindowIterator + OffsetScrollPosition kullanılır. Window.hasNext() çağrısı yapmaya gerek yok
public List<BookReview> getBooksUsingOffSetFilteringAndWindowIterator(String rating) {
WindowIterator<BookReview> bookReviews = WindowIterator.of(position ->
bookRepository
.findFirst5ByBookRating("3.5", (OffsetScrollPosition) position))
.startingAt(ScrollPosition.offset());
List<BookReview> bookReviewsResult = new ArrayList<>();
bookReviews.forEachRemaining(bookReviewsResult::add);
return bookReviewsResult;
}
Keyset-Filtering
Açıklaması şöyle. WindowIterator + KeysetScrollPosition kullanılır
Keyset filtering helps the retrieval of a subset of results using the built-in capabilities of the database aiming to reduce the computation and IO requirements for individual queries.The database only needs to construct smaller results from the given keyset position without materializing a large full result
Örnek
Şöyle yaparız
public List<BookReview> getBooksUsingKeySetFiltering(String rating) {
WindowIterator<BookReview> bookReviews = WindowIterator.of(position ->
bookRepository
.findFirst5ByBookRating(rating, (KeysetScrollPosition) position))
.startingAt(ScrollPosition.keyset());
List<BookReview> bookReviewsResult = new ArrayList<>();
bookReviews.forEachRemaining(bookReviewsResult::add);
return bookReviewsResult;
}
Hiç yorum yok:
Yorum Gönder