내가 단순한 CQL 테이블이 상상CQL 바이너리 프로토콜 및 명명 된 바인딩 변수
CREATE TABLE test (
k int PRIMARY KEY,
v1 text,
v2 int,
v3 float
)
이 하나가 카산드라의 스키마없는 본질의 사용을 해보고 싶어요 많은 경우가 있고 일부 설정 값 및 수행 예를 들어,이
INSERT into test (k, v1) VALUES (1, 'something');
카산드라 클러스터에 같은 CQL 테이블에 쓸 수있는 응용 프로그램을 작성, 필요가 준비된 문을 사용하여이 즉시 성능상의 이유로 발생 할 수 있습니다.
이것은 다른 드라이버에 의해 다른 방식으로 처리됩니다. 예를 들어 Java 드라이버는 (CQL 바이너리 프로토콜의 수정을 통해) 명명 된 바운드 변수를 사용할 수있는 기회를 도입했습니다. 매우 실용적인 : CASSANDRA-6033
제가 궁금한 것은 바이너리 프로토콜 관점에서 준비된 쿼리에서 바운드 변수의 하위 집합에 대해서만 값을 제공하는 올바른 방법은 무엇입니까? 사실
값은 다음과 내가 얻을이 설명에서 [바이트]
[bytes] A [int] n, followed by n bytes if n >= 0. If n < 0,
no byte should follow and the value represented is `null`.
의 정의를 참고
4.1.4. QUERY
[...]
Values. In that case, a [short] <n> followed by <n> [bytes]
values are provided. Those value are used for bound variables in
the query.
에 설명 된대로 값 목록을 구축하여 준비된 쿼리에 제공 :
- QUERY의 "값"은 특정 값으로 을 제공 할 방법이 없습니다. 열. 이것은 값의 순서가 정해진 목록 일뿐입니다. 나는 [short]가 준비된 쿼리에서 바운드 변수의 정확한 수와 일치해야한다고 생각하십니까?
- 모든 값은 유형에 관계없이 [바이트]로 표시됩니다. 이것이 사실이라면 [bytes] 값의 해석은 서버에 남겨집니다 (int, short, text, ...로 변환)?
나는이 값이 적당하다고 가정하고, 바인딩 된 변수를 '건너 뛰고'값을 할당하지 않고 'null'[바이트] 값을 사용할 수 있는지 궁금합니다.
나는 이것을 시험해보고 cpp 드라이버를 패치했다 (이것이 내가 관심있는 것이다). 쿼리가 실행되지만 clqsh에서 SELECT를 수행하면 빈 필드에 대한 'null'문자열 표현이 표시되지 않습니다. 그래서 해킹이되는 이유가 몇 가지 이유가 있습니다. .
죄송하지만 실제로 자바 드라이버를 다운로드하고 이름이 바운드 변수가 구현되는 방법을 볼 수는 없다고 생각합니다. :(
---------- 편집 -이 해결 ----------
내 가정이 옳았 지금 준비된 쿼리에왔다 필드를 건너 뛸 지원 널에게 [바이트 값]을 사용하여 CPP 드라이버 (here 참조)에 추가됩니다.