3 Stimmen

Serialisierung der RowMutation

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. ....

1voto

mico Punkte 12530

Ich habe in der Quellcode der Zeilenmutation wo es im selben Paket einen RowMutationSerializer gab, der die Methode

       serialize(RowMutation, DataOutputStream, int)

Könnte das für etwas gut sein?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X