пятница, 17 августа 2012 г.

Пост 12. ACID. Durability.

Едем дальше. Durability. Что это значит? А значит это то, что независимо от проблем на нижних уровнях (к примеру, обесточивание системы или сбои в оборудовании) изменения, сделанные успешно завершённой транзакцией, должны остаться сохранёнными после возвращения системы в работу. Другими словами если пользователь внес данные в вашу систему и почил подтверждение о том, что они успешно записаны, они не должны быть потеряны, вне зависимости ни отчего (пропало питание в ЦОД, посыпался диск...). Ну представьте вы купили электронный авиабилет, вам пришло подтверждение. Тут же посыплся диск на который вы записали свои данные. Приезжаете в аэропорт в солнцезащитных очках, гавайской рубашке и в предвкушении долгожданного пляжного отдыха, а Вам говорят, что данных в системе нет. Ситуация конечно излишне гиперболизирована, но суть думаю ясна.
В контексте Oracle NoSQL это выглядит вот так:



Рис.1. Durability.

Итак, при проектировании приложения нам приходится выбирать между надежностью и скоростью. У нас есть 2 измерения для выбора "золотой середины". Первое - уровень синхронизации - когда данные могут считаться записанными: когда они попали в ОЗУ (самое быстрое), когда из ОЗУ они перешли в буфферный кэш файловой системы, либо когда они попали на диск (самое надежное). Второе измерение это так называемая обратная связь (сколько серверов подтвердило поступление пары ключ-значение). Самое быстрое - "ни одного", то есть пары попали только на мастера, далее следует режим majority (от многих), ну и самым надежным является тот случай, если получение пары подтвердили все сервера репликационной группы. Использовать это API проще простого.
Устанавливаем настройки надежности:

Durability durability =
new Durability (Durability.SyncPolicy.SYNC, Durability.SyncPolicy.SYNC, Durability.ReplicaAckPolicy.ALL);
myStore.put(myKey, myValue,null,durability,30, TimeUnit.SECONDS);

Вот как то так.
Если у вас есть какие-либо вопросы по Oracle NoSQL - задавайте в комментах, постараюсь ответить, либо пишите на oracle.nosql@gmail.com.

3 комментария:

  1. Здравствуйте,

    подскажите, при записи NoSQL сервером данных на диск - как устроена работа СУБД?
    Она пишет все в один файл или несколько (например, data, index, log)? Как происходит запись в файл (блоками или построчно)?
    Какую FS рекомендуется использовать для работы СУБД (с журнализацией или без)?

    ОтветитьУдалить
  2. Этот комментарий был удален автором.

    ОтветитьУдалить
    Ответы
    1. Добрый день!

      запись файлов подобна записив Berkley DB.
      Запись происходит поблочно.
      *.jdb файлы по умолчани 1Гб.
      Производительно сть файловой системы (рекомендуемая ФС ext3 или ext4), потюнить можно вот так
      http://www.westnet.com/~gsmith/content/linux-pdflush.htm

      Удалить