Я пытаюсь понять, почему я вижу разные данные двумя способами для отображения столбцов семейства столбцов Cassandra (1.2.x).
Во-первых, я использую cassandra-cli
для list
строк в семействе столбцов.
[cassandra-cli]> list Users columns 1;
Using default limit of 100
-------------------
RowKey: [rowkey1]
=> (name=[name1], value=[value1], timestamp=[timestamp1])
Данные между []
являются заполнителем для значения. В действительности они отображаются как шестнадцатеричное представление byte[]
. Вышеупомянутое указывает, что есть одна строка с одним столбцом (который имеет имя, значение и временную метку).
Я делаю то, что, как я думаю, эквивалентен API DataStax v1
var cluster = Cluster.Builder ()
.AddContactPoint ("127.0.0.1")
.Build ();
var metadata = cluster.Metadata;
var keyspace = "keyspaceName";
var tableMetadatas = metadata.GetTables(keyspace);
foreach (var tableMetadata in tableMetadatas) {
var session = cluster.Connect(keyspace);
var rowSet = session.Execute("SELECT * FROM \""+ tableMetadata + "\" ", ConsistencyLevel.One);
CqlColumn[] columns = rowSet.Columns;
foreach(var column in columns) {
Console.WriteLine("Column name: " + column.Name + ", type: " + column.Type + ", keyspace: " + column.Keyspace);
}
foreach (var row in rowSet.GetRows()) {
for (int i = 0; i < row.Length; i++) {
String value = Encoding.UTF8.GetString(row.GetValue<byte[]>(i));
Console.WriteLine(value);
}
}
}
Это отображает
Column name: key, type: System.Byte[], keyspace: keyspaceName
Column name: column1, type: System.Byte[], keyspace: keyspaceName
Column name: value, type: System.Byte[], keyspace: keyspaceName
[The string value of rowkey1]
[The string value of name1]
[The string value of value1]
Кажется, это указывает на наличие трех столбцов: один с key
имени, где значение является rowkey
; один с именем column1
, где значение - значение name1
; и один с именем value
, где значение является значением value1
.
Как я должен интерпретировать эти расхождения?
При использовании cassandra-cli
вы видите "Thrift-перспективу" вашего хранилища, используя драйвер cqlsh
а cqlsh
даст вам "CQL-перспективу".
Был ряд сообщений, описывающих, как эти 2 связаны. Я связался с ними в своем ответе на вопрос о Разном между Thrift и CQL3 на SO.