Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
连接到0.7英寸.NET的Cassandra_.net_Cassandra_Thrift_Cassandra 0.7_Fluentcassandra - Fatal编程技术网

连接到0.7英寸.NET的Cassandra

连接到0.7英寸.NET的Cassandra,.net,cassandra,thrift,cassandra-0.7,fluentcassandra,.net,Cassandra,Thrift,Cassandra 0.7,Fluentcassandra,我在尝试从Cassandra 0.6升级到0.7 beta1时遇到了很多麻烦。我原本以为这是一个操作顺序的问题,所以我决定将其分解为基本问题 这是我将要起诉的基本设置 TTransport framedTransport = new TFramedTransport(new TSocket("localhost", 9160)); TTransport socketTransport = new TSocket("localhost", 9160); TProtocol framedProtoc

我在尝试从Cassandra 0.6升级到0.7 beta1时遇到了很多麻烦。我原本以为这是一个操作顺序的问题,所以我决定将其分解为基本问题

这是我将要起诉的基本设置

TTransport framedTransport = new TFramedTransport(new TSocket("localhost", 9160));
TTransport socketTransport = new TSocket("localhost", 9160);
TProtocol framedProtocol = new TBinaryProtocol(framedTransport);
TProtocol socketProtocol = new TBinaryProtocol(socketTransport);
然后,我尝试通过以下方式改变客户端的设置切换输入和输出协议:

var client = new Cassandra.Client(framedProtocol, framedProtocol); // all framed
var client = new Cassandra.Client(socketProtocol, socketProtocol); // all socket
var client = new Cassandra.Client(framedProtocol, socketProtocol); // in: framed out: socket
var client = new Cassandra.Client(socketProtocol, framedProtocol); // in: socket out: framed
然后我执行下面的程序,使用默认的Cassandra配置,我正在执行一个简单的请求,比如一个计数,我希望它返回零,因为没有插入数据

framedTransport.Open();
socketTransport.Open();
Console.WriteLine("Start");

client.set_keyspace("Keyspace1");

var key = System.Text.Encoding.ASCII.GetBytes("MyKey");
var columns = new List<byte[]>(new[] { System.Text.Encoding.ASCII.GetBytes("MyColumn") });
var column_parent = new ColumnParent {
    Column_family = "Standard1"
};
var predicate = new SlicePredicate {
    Column_names = columns
};
client.get_count(key, column_parent, predicate, ConsistencyLevel.ALL);

Console.WriteLine("Done");
Console.Read();
framedTransport.Open();
socketTransport.Open();
控制台写入线(“开始”);
客户端。设置密钥空间(“密钥空间1”);
var key=System.Text.Encoding.ASCII.GetBytes(“MyKey”);
var columns=new List(new[]{System.Text.Encoding.ASCII.GetBytes(“MyColumn”)});
var column\u parent=新ColumnParent{
列_family=“标准1”
};
var谓词=新谓词{
列名称=列
};
获取计数(键、列、父项、谓词、ConsistenceLevel.ALL);
控制台。写入线(“完成”);
Console.Read();
我上面提供的4种不同设置都无法执行。他们中的一些人刚刚锁定,其他人抛出了一个异常。因此,基本上我一直在尝试与新的Cassandra 0.7和.NET框架建立连接

以下是我发现的每个问题的类型:

  • 全框
    :锁定设置键空间
  • all socket
    :在set\u keyspace上抛出无效的方法名称:“set\u keyspace”
  • in:framed out:socket
    :锁定设置键空间
  • in:socket out:framed
    :锁定设置键空间
我99%确信这与我在Cassandra的节俭层所做的事情有关,因为我无法让这个简单的应用程序工作。但如果您想浏览我的0.7分支,您可以在此处找到它:

可能C#节俭框架模式代码有问题,因为服务器端的所有更改都是将框架模式设置为默认模式,而不是取消框架模式。您可以在cassandra.yaml中将其切换回,作为一种解决方法

(在连接的输入/输出端指定不同的协议有点疯狂。我知道没有其他节约语言会这样做。如果你深入研究代码生成,这是另一件可能要解决的事情。)

可能C#节约框架模式代码有缺陷,因为服务器端的所有更改都是将框架设置为默认模式,而不是取消框架。您可以在cassandra.yaml中将其切换回,作为一种解决方法


(在连接的输入/输出端指定不同的协议有点疯狂。我知道没有其他节约语言会这样做。如果你深入研究代码生成,这是另一件可能需要修复的事情。)

我没有更新Windows中的环境变量以指向0.7的新位置。因此,它基本上运行的是稳定版本,而不是测试版。在我更新环境变量以指向新位置后,一切又开始工作。

我没有在Windows中更新环境变量以指向新位置0.7。因此,它基本上运行的是稳定版本,而不是测试版。在我将环境变量更新为指向新位置后,一切都重新开始工作。

Thrift客户端代码自0.2以来大部分时间没有更改。此外,输入和输出是0.7的新添加,允许您使用不同的服务器进行写入和读取。所以我只是利用这一点来测试我的代码,看看是否有区别。但不管怎样,我发现了问题所在。因为我尝试了0.7,所以我把它放在了一个不同的路径中,但我没有做的是将环境变量注册到我正在使用的新路径中。所以在那之后,一切都起了作用。我想是眼不见心不烦了。自0.2以来,节俭客户端代码大部分都没有改变。此外,输入和输出是0.7的新添加,允许您使用不同的服务器进行写入和读取。所以我只是利用这一点来测试我的代码,看看是否有区别。但不管怎样,我发现了问题所在。因为我尝试了0.7,所以我把它放在了一个不同的路径中,但我没有做的是将环境变量注册到我正在使用的新路径中。所以在那之后,一切都起了作用。“看不见,想不起来。”运行cassandra是你的错,你对jbellis的答案投了-1票,而他提到了连接到0.7时最常见的情况?顺便说一句,不要使用环境变量。除了使用环境变量之外,没有其他方法可以轻松启动cassandra批处理文件。杰贝利斯被否决了,因为他所说的一切都是个人意见,根本没有事实根据。C#Thrift代码不是有缺陷的,它是Thrift中没有经历过从0.2到0.4任何更改的库之一。其次,为输入和输出指定不同的协议并不疯狂,特别是如果您想使用不同的服务器进行读写。它被否决了,因为它没有一个是基于事实的。顺便说一句,你不应该使用投票系统进行恶意行为。顺便说一句,如果你想抱怨在Windows平台上使用环境变量,我同意你的看法。在这里提交所有的抱怨,在C#版本的节俭中,人们称之为bug,通常是他们对大端和小端缺乏理解。NET framework同时支持这两种语言,Java只支持Big-Endian,因此如果他们的机器使用Little-Endian向基于Java的Cassandra发送数据,那么Big-Endian的类型将不匹配。我曾将其视为一个Bug,但这并不是因为Thrift是一个独立于语言的协议,所以它在传输数据时不应该关心Big和Little-Endian。另一个原因是我否决了杰贝利斯,因为他传播了错误的信息