Cassandra ne prend pas en charge la pagination dans le sens de pointer vers une page spécifique (limite/décalage) mais génère un jeton de continuation (PagingState
) qui correspond à un ensemble de byte
s. Tirer un List
des enregistrements chargera tous les enregistrements en mémoire et épuisera peut-être votre mémoire (selon la quantité de données).
données Cassandra Spring 1.5.0 RC1 est livré avec un streaming API dans CassandraTemplate:
Iterator<Person> it = template.stream("SELECT * FROM person WHERE … ;", Person.class);
while(it.hasNext()) {
// …
}
CassandraTemplate.stream(…)
retourne un Iterator
qui fonctionne sur un ResultSet
sous-jacent. Le pilote DataStax utilise une taille de récupération configurable (5000
lignes par défaut) pour la récupération en bloc. L'accès aux données en continu peut récupérer autant de données que nécessaire pour traiter les données. Les données ne sont pas conservées par le pilote ni par Spring Data Cassandra, et une fois que le volume récupéré est extrait du Iterator
, le ResultSet
sous-jacent récupère lui-même le volume suivant.
L'autre alternative consiste à utiliser ResultSet
directement qui vous donne accès à PagingState
et de faire de toute l'activité de continuation/paging par vous-même. Vous perdriez tous les avantages de niveau supérieur de Spring Data Cassandra.