CassandraCsharpDrivers中的PreparedStatementCachingIssues我相信我在Cassandracsharp驱动(2.7.3版本)的StatementFactory中发现了如何做到这一点缓存中的逻辑错误准备好的陈述。这是用例。Guid键=Guid.NewGuid();//你的密钥ISessionsession_foo=newSession("foo");//这是伪代码ISessionsession_bar=newSession("bar");varfoo_mapper=newMapper(session_foo);//表foo_barvarbar_mapper=newMapper(session_bar);//表foo_bar等待任务。我们发现运行这个delete后,只有第一个请求成功了。在使用StatementFactory的源代码后潜水,cql.Arguments);SetStatementProperties(声明,cql);返回TaskHelper.ToTask(语句);}return_statementCache.GetOrAdd(cql.Statement,session.PrepareAsync).Continue(t=>{if(_statementCache.Count>MaxPreparedStatementsThreshold){Logger.Warning(String.Format("准备好的语句缓存包含{0}个查询。使用查询的参数标记。您可以使用MappingConfiguration.SetMaxStatementPreparedThreshold()方法配置此警告阈值。绑定语句;});可以看到缓存只用了cql语句。在我们的例子中,我们在不同的键空间(又名会话)中有相同的表名。我们的cql语句在两个查询中看起来是一样的。即从foo_bar中删除id=?.如果我不得不猜测,我会说一个简单的解决方法是将cql语句和键空间组合为缓存键。还有其他人遇到过这个问题吗?作为一个简单的解决方法,我使用DoNotPrepare来跳过缓存我还发现DatastaxThereisanopenticketforanopenissue解决了这个问题。作为解决方法,您可以在创建映射器时使用不同的MappingConfiguration实例:ISessionsession1=cluster.Connect("ks1");ISessionsession2=cluster.Connect("ks2");IMappermapper1=newMapper(session1,newMappingConfiguration());IMappermapper2=newMapper(session2,newMappingConfiguration());或者,您可以重复使用单个ISession实例并完全限定查询以包含键空间。以上就是C#学习教程的全部内容:CassandraCsharp驱动preparedstatementcache问题分享,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注—MappingConfiguration.Global。Define(newMap().TableName("foo").KeyspaceName("ks1"),newMap().TableName("bar").KeyspaceName("ks2"));ISessionsession=cluster.Connect();IMapper映射器=newMapper(session);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
