5

Cassandra には、次の列ファミリーがあります。

<ColumnFamily CompareWith="TimeUUIDType" Name="Posts"/>

Thrift によって生成された C++ 生成関数を使用して、次のようにレコードを挿入しようとしています。

ColumnPath new_col;
new_col.__isset.column = true; /* this is required! */
new_col.column_family.assign("Posts");
new_col.super_column.assign("");
new_col.column.assign("1968ec4a-2a73-11df-9aca-00012e27a270");
client.insert("Keyspace1", "somekey", new_col, "Random Value", 1234, ONE);

ただし、次のエラーが表示されます:「UUID は正確に 16 バイトである必要があります」

次のコマンドで Cassandra CLI を試してみました。

set Keyspace1.Posts['somekey']['1968ec4a-2a73-11df-9aca-00012e27a270'] = 'Random Value'

しかし、私はまだ次のエラーが発生します:

Exception null
InvalidRequestException(why:UUIDs must be exactly 16 bytes)
 at org.apache.cassandra.thrift.Cassandra$insert_result.read(Cassandra.java:11994)
 at org.apache.cassandra.thrift.Cassandra$Client.recv_insert(Cassandra.java:659)
 at org.apache.cassandra.thrift.Cassandra$Client.insert(Cassandra.java:632)
 at org.apache.cassandra.cli.CliClient.executeSet(CliClient.java:420)
 at org.apache.cassandra.cli.CliClient.executeCLIStmt(CliClient.java:80)
 at org.apache.cassandra.cli.CliMain.processCLIStmt(CliMain.java:132)
 at org.apache.cassandra.cli.CliMain.main(CliMain.java:173)
4

1 に答える 1

7

Thrift はバイナリ プロトコルです。16 バイトは 16 バイトを意味します。「1968ec4a-2a73-11df-9aca-00012e27a270」は 36 バイトです。生の 16 バイト形式を提供するには、ライブラリを取得する必要があります。

私自身は C++ を使用していませんが、「バージョン 1 uuid」は、これを実行できるライブラリを探すときにググる魔法の文字列です。 http://www.google.com/search?q=C%2B%2B+version+1+uuid

于 2010-03-08T15:21:29.890 に答える