cassandra paging 分页方法应用

在Node.js中,由于其单线程性质,处理大量数据时可能会导致内存消耗过大和响应时间延长。Cassandra的driver提供了#eachRow()和#stream()方法进行分页,以避免一次性加载所有结果。默认的fetchSize为5000行,但自动和手动分页提供了更灵活的控制方式。

费了2天的时间,终于找到了如何实现分页的办法。 cassandra 只在nodejs driver 1.0里提到了如何分页,后面就再也没有提过了,坑爹啊。 网络上搜遍了,都只有java的driver example, 也没有说这个pageState这么用。 

要实现分页,driver execute是做不到的,所以要用eachRow 的API实现分页, 要用到的参数主要是:
autoPage: 是否要连续查询所有页面
pageState: 用来存放最后一次查询最后一条记录的token, 这样下次查询的时候就直接从下一条记录开始查,这个很重要,否则就是网站上看到的其他人贴出来的手动记录方法了
fetchSize: 每一页查询多少记录

对于我们的应用是: 查出100万条记录,然后分页到网站使用。 需要提供总得记录数字,和实时查询需要页数内的记录。
1. 总的记录数目:这个必须要做一次全部查询,目前只有这个办法。 这个API有个好处,就是有一个function(n,row), 当你不做任何操作的时候,他不保存任何记录信息,这样做就可以不需要buffer 来保存每一条具体的记录,而只是在最后的function(err, result) 拿出rowLength 即可; 

2. 分页查询: 假设按webpage 每页25条记录,先给出webpage 1的数据, 那么就是page1 (注意,webpage 是网站上显示的页面, page是后端数据库的page);如果此时客户直接点了webpage3, 跳过了webpage2, 那么对后端其实没有影响,还是照样给page2的信息给前段即可,因为
### Spring Data Apache Cassandra API 示例项目与使用 Spring Data for Apache Cassandra 提供了强大的功能来简化与 Cassandra 数据库的交互。以下是一个典型的示例,展示如何配置和使用 Spring Data Cassandra API[^1]。 #### 1. Maven 依赖配置 为了使用 Spring Data Cassandra,需要在项目的 `pom.xml` 文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-cassandra</artifactId> </dependency> ``` #### 2. 配置文件设置 在 `application.properties` 或 `application.yml` 中进行必要的配置。例如,在 `application.properties` 中可以这样设置: ```properties spring.data.cassandra.keyspace-name=my_keyspace spring.data.cassandra.contact-points=cassandra-node-1,cassandra-node-2 spring.data.cassandra.port=9042 spring.data.cassandra.schema-action=CREATE_IF_NOT_EXISTS ``` 上述配置指定了 Cassandra 的连接点、端口、密钥空间以及模式操作行为[^2]。 #### 3. 实体类定义 定义一个实体类以映射到 Cassandra 表。例如: ```java import org.springframework.data.cassandra.core.mapping.PrimaryKey; import org.springframework.data.cassandra.core.mapping.Table; @Table("user") public class User { @PrimaryKey private String id; private String name; private int age; // Getters and Setters } ``` #### 4. Repository 接口 创建一个接口扩展 `CassandraRepository` 或 `ReactiveCassandraRepository`,用于执行 CRUD 操作: ```java import org.springframework.data.cassandra.repository.CassandraRepository; public interface UserRepository extends CassandraRepository<User, String> { List<User> findByName(String name); } ``` #### 5. 使用示例 以下是一个简单的服务类,展示如何使用上述配置和接口: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserService { @Autowired private UserRepository userRepository; public List<User> getUsersByName(String name) { return userRepository.findByName(name); } public void saveUser(User user) { userRepository.save(user); } } ``` #### 6. 进一步参考 更多高级用法和配置选项可以参考 Spring Data 团队编写的书籍中的示例代码[^1],或者访问官方 GitHub 仓库获取最新版本的功能支持。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值