Доброго времени суток!
Как и обещал сейчас мы рассмотрим конкретный пример AVRO сериализации в базе данных Oracle.
Итак:
1)Рассмотрим объект: человек. У него есть атрибуты имя и возраст.
Пример файла схемы данных (допустим он лежит в /home/oracle/nosql/avro/member-schemas_new.avsc)
Итак:
1)Рассмотрим объект: человек. У него есть атрибуты имя и возраст.
Пример файла схемы данных (допустим он лежит в /home/oracle/nosql/avro/member-schemas_new.avsc)
{
"type": "record",
"name": "userProfile",
"namespace": "my.example",
"fields": [
{"name": "name", "type": "string", "default" : ""},
{"name": "age", "type": "int", "default": -1}
]
}
2)Добавьте файл схемы данных в базу данных Oracle NoSQL Database
java -jar /home/cloudera/nosql/kv-2.0.23/lib/kvstore-2.0.23.jar runadmin -port 5000 -host localhost ddl add-schema -file /home/oracle/nosql/avro/member-schemas_new.avsc
java -jar /home/cloudera/nosql/kv-2.0.23/lib/kvstore-2.0.23.jar runadmin -port 5000 -host localhost ddl add-schema -file /home/oracle/nosql/avro/member-schemas_new.avsc
3) Напишем код, который работает со схемой данных.
import Support.OraStore;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import javax.sound.sampled.Port;
import oracle.kv.*;
import org.apache.avro.generic.GenericData;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.Schema;
import oracle.kv.avro.AvroCatalog;
import oracle.kv.avro.GenericAvroBinding;
public class a_AvroGenericBind {
static String port = "5000";
static String host = "localhost";
static String store = "kvstore";
private static Schema personSchema;
private static GenericRecord member;
private static String SchemaFile = "/home/oracle/nosql/avro/member-schemas_new.avsc";
private static String SchemaName = "my.example.userProfile";
private static KVStore myStore;
static String UserName = "Alexey";
public static void main(String[] args) throws IOException {
RunExample();
}
public static void RunExample() throws IOException {
OraStore orastore = new OraStore(store, host, port);
KVStore myStore = orastore.getStore();
final Schema.Parser parser = new Schema.Parser();
parser.parse(new File(SchemaFile));
personSchema = parser.getTypes().get(SchemaName);
final AvroCatalog catalog = myStore.getAvroCatalog();
final GenericAvroBinding binding = catalog.getGenericBinding(personSchema);
final Key key = Key.createKey(Arrays.asList("userProfile", UserName));
final ValueVersion valueVersion = myStore.get(key);
final int age;
if (valueVersion != null) {
member = binding.toObject(valueVersion.getValue());
System.out.println("INITIAL VALUE:\n" + member.toString());
final int oldAge = (Integer) member.get("age");
age = oldAge + 1;
member.put("age", age);
myStore.put(key, binding.toValue(member));
} else {
System.out.println("NO INITIAL VALUE");
member = new GenericData.Record(personSchema);
System.out.println(personSchema.toString());
member.put("name", UserName);
member.put("age", 24);
}
System.out.println("NEW VALUE");
myStore.put(key, binding.toValue(member));
System.out.println(member.toString());
myStore.close();
}
}
Если есть запись - идет апдейт части value, если нет - создается новая пара. Как то так.
Если кто то хочет получить виртуалку с примерами, в том числе и этим - пишите на oracle.nosql@gmail.com