Cassandra C#驱动程序手动分页不起作用

问题描述

我正在尝试使用C#在Cassandra中使用手动分页。

以下是版本详细信息:

它是驱动程序版本3.11.0

我的服务器版本为[cqlsh 5.0.1 |卡桑德拉3.11.4 | CQL规范3.4.4 |原生协议v4]

下面是我正在尝试的代码

 var cluster = Cluster.Builder()
 .AddContactPoints("x.x.x.x","x.x.x.x","x.x.x.x")
 .WithCompression(CompressionType.Snappy)
 .Build();
 var session = cluster.Connect("shekhar");

var statement = new SimpleStatement("select * from table ALLOW FILTERING");
statement.SetAutoPage(false);
statement.SetPageSize(1000);
var rs = await session.ExecuteAsync(statement);
int rowNo = 0;
foreach (var row in rs)
    Console.WriteLine("{0}: Cooment has Id {1},has tweet {2}",rowNo++,row.GetValue<BigInteger>("id"),row.GetValue<string>("xxx"));
//rs.FetchMoreResults();
//Console.WriteLine(rs.IsExhausted());
//Console.WriteLine(rs.IsFullyFetched);
//Console.WriteLine(rs.PagingState);

通过设置 statement.SetAutoPage(false); ,它只能获取一页。
最后一个语句Console.WriteLine(rs.IsFullyFetched);Console.WriteLine(rs.IsFullyFetched);的值是true,因此也使用它们并没有什么区别。

我也遵循https://docs.datastax.com/en/developer/csharp-driver/3.13/features/paging/部分中的建议,在下一条语句中使用了PagingState
使用它可以一次又一次地提取旧数据。

这是我的实现方法

 var statement = new SimpleStatement("select * from table ALLOW FILTERING");
 statement.SetAutoPage(false);
 statement.SetPageSize(1000);
 int rowNum = 0;
 await GetAllData_PagedData(session,statement,null,rowNum);
 Console.ReadLine();

static async Task GetAllData_PagedData(ISession session,IStatement statement,byte[] pagingState,int rowNum)
    {
        var statement2 = statement
                       .SetPagingState(pagingState);
        var rs2 = session.Execute(statement2);
        var pagingState1 = rs2.PagingState;
        foreach (var row in rs2)
        {
            Console.WriteLine("{0}: Cooment has Id {1},rowNum++,row.GetValue<string>("column2"));
        }
        if (!rs2.IsFullyFetched)
            await GetAllData_PagedData(session,statement2,pagingState1,rowNum);
        else
            Console.WriteLine("All Data fetched...");

    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)