пятница, 12 апреля 2013 г.

Пост 20. Версионность в Oracle NoSQL Database.

В Oracle NoSQL DB есть понятие версии значения. Версия всегда возвращается методу который осуществляет запись в базу KVStore.put() (и ему подобных: putIfpresent, putIfabsent…) и методам, которые получают значение по ключу.

Когда идет операция изменения или удаления бывает очень важно выполнить ее только в том случае, если значение не изменилось. В NoSQL есть следующие методы KVStore.putIfVersion() or KVStore.deleteIfVersion(). В принципе добавить к этому больше нечего – привожу пример кода, который из меняет пару ключ – значение, только в том случае если значение не изменилось (например у нас есть некий счетчик который инкрементально увеличивается при каждом событии, а события могут идти в несколько потоков). Вот здесь метод putIfVersion придется как никогда кстати. Давайте создадим еще один медод, который будет выполнять все вышеописанное.
Метод назовем UpdateIfNotchange – изменять, если не изменилосьJ

public static void UpdateIfNotchange(String sKey, String data, KVStore myStore)
throws FileNotFoundException, IOException {

Key myKey = ParseKey.ParseKey(sKey);
Value myValue = Value.createValue(data.getBytes());
try {
ValueVersion vv = myStore.get(myKey);
Version OldVersion = vv.getVersion();
Version NewVersion = myStore.putIfVersion(myKey, myValue, OldVersion);
if (NewVersion == null) {
System.out.println("Operation Failed! Vesion error");
} else {
System.out.println("Record created in the kvstore.");
}
} catch (NullPointerException np) {
System.out.println("KV pair doesn't exist!");
}
}


Как то так. Если будут вопросы - welcome!

Комментариев нет:

Отправить комментарий