Frage Wie wird Paginierung in reaktiven Frühlingsdaten angewendet?


In Spring Data haben wir PagingAndSortingRepository was erbt von CrudRepository. In reaktiven Frühlingsdaten haben wir nur ReactiveSortingRepository was erbt von ReactiveCrudRepository. Wie könnten wir die Seitenumbruch reaktiv machen? Werden wir das in Zukunft mit machen können? ReactivePagingAndSortingRepository zum Beispiel?


5
2017-09-23 21:54


Ursprung


Antworten:


Reaktive Spring-Daten MongoDB-Repositories bieten kein Paging im Sinne von Paging, wie es für imperative Repositories gedacht ist. Imperative Paging erfordert zusätzliche Details beim Abrufen einer Seite. Bestimmtes:

  • Die Anzahl der zurückgegebenen Datensätze für eine Paging-Abfrage
  • Optional ergibt sich die Gesamtzahl der Datensätze, die die Abfrage liefert, wenn die Anzahl der zurückgegebenen Datensätze Null ist oder mit der Seitengröße übereinstimmt, um die Gesamtzahl der Seiten zu berechnen

Beide Aspekte passen nicht zu einer effizienten, nicht blockierenden Ressourcennutzung. Warten bis alle Datensätze empfangen sind (um den ersten Teil der Paging-Details zu bestimmen) würde einen großen Teil der Vorteile, die Sie durch den reaktiven Datenzugriff erhalten, beseitigen. Darüber hinaus ist das Ausführen einer Zählabfrage ziemlich teuer und erhöht die Verzögerung, bis Sie Daten verarbeiten können.

Sie können immer noch Datenbrocken selbst abholen, indem Sie einen übergeben Pageable (PageRequest) zu Repository-Abfrage-Methoden:

interface ReactivePersonRepository extends Repository<Person, Long> {

  Flux<Person> findByFirstnameOrderByLastname(String firstname, Pageable pageable);
}

Spring Data wendet eine Seitennumerierung auf die Abfrage an, indem sie übersetzt Pageable zu LIMIT und OFFSET.

Verweise:


7
2017-09-24 15:40



import com.thepracticaldeveloper.reactiveweb.domain.Quote;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.repository.reactive.ReactiveCrudRepository;
import reactor.core.publisher.Flux;

public interface QuoteMongoReactiveRepository extends ReactiveCrudRepository<Quote, String> {

    @Query("{ id: { $exists: true }}")
    Flux<Quote> retrieveAllQuotesPaged(final Pageable page);
}

mehr Details , Sie könnten hier nachsehen 


0
2018-05-04 08:19