Innerhalb des Cassandra-Quelltextes auf Github ( https://github.com/apache/cassandra ), gibt es ein Beispiel für das Schreiben von Daten in examples/client_only/src/ClientOnlyExample.java
:
private static void testWriting() throws Exception
{
// do some writing.
for (int i = 0; i < 100; i++)
{
RowMutation change = new RowMutation(KEYSPACE, ByteBufferUtil.bytes(("key" + i)));
ColumnPath cp = new ColumnPath(COLUMN_FAMILY).setColumn(("colb").getBytes());
change.add(new QueryPath(cp), ByteBufferUtil.bytes(("value" + i)), 0);
// don't call change.apply(). The reason is that is makes a static call into Table, which will perform
// local storage initialization, which creates local directories.
// change.apply();
StorageProxy.mutate(Arrays.asList(change), ConsistencyLevel.ONE);
System.out.println("wrote key" + i);
}
System.out.println("Done writing.");
}
Ich bin auf der Suche, um die Daten in ein lesbares Format (JSON) zu serialisieren, wo die Schreibvorgänge zu geschehen scheinen, org.apache.cassandra.service.StorageProxy
innerhalb der Methode performWrite
:
public static IWriteResponseHandler performWrite(IMutation mutation,
ConsistencyLevel consistency_level,
String localDataCenter,
WritePerformer performer)
throws UnavailableException, IOException
{
...
Le IMutation
Parameter scheint das zu sein, was ich will, denn RowMutation
diese Klasse implementiert. Ich kann die Tabelle (Schlüsselbereich) und die Spaltenfamilien herausfinden, aber ich kann die Spaltennamen/-werte nicht abrufen. Wenn ich mich innerhalb der genannten Methode befinde, wie erhalte ich diese Informationen von IMutation mutation
?
// keyspace
String table = mutation.getTable();
// TODO won't work with batch?
UUID cfId = mutation.getColumnFamilyIds().iterator().next();
// column family name cfMetadata.cfName
CFMetaData cfMetadata = Schema.instance.getCFMetaData(cfId);
// row key
RowMutation data = new RowMutation(table, mutation.key());
String row = ByteBufferUtil.bytesToHex(data.key());
// column name/values ??
// data. ....