10.2.4. Обеспечение устойчивости объектов с помощью библиотеки PStore
10.2.4. Обеспечение устойчивости объектов с помощью библиотеки PStore
Библиотека PStore реализует хранение объектов Ruby в файле. Объект класса PStore может содержать несколько иерархий объектов Ruby. У каждой иерархии есть корень, идентифицируемый ключом. Иерархии считываются с диска в начале транзакции и записываются обратно на диск в конце.
require "pstore"
# Сохранить.
db = PStore.new("employee.dat") db.transaction do
db["params"] = {"name" => "Fred", "age" => 32,
"salary" => 48000 }
end
# Восстановить.
require "pstore"
db = Pstore.new("employee.dat")
emp = nil
db.transaction { emp = db["params"] }
Обычно внутри блока транзакции используется переданный ему объект PStore. Но можно получить и сам вызывающий объект, как показано в примере выше.
Эта техника ориентирована на транзакции; в начале блока обрабатываемые данные читаются с диска. А в конце прозрачно для программиста записываются на диск.
Мы можем завершить транзакцию досрочно, вызвав метод commit или abort. В первом случае все изменения сохраняются, во втором отбрасываются. Рассмотрим более длинный пример:
require "pstore"
# Предполагается, что существует файл с двумя объектами.
store = PStore.new("objects")
store.transaction do |s|
a = s["my_array"] h = s["my_hash"]
# Опущен воображаемый код, манипулирующий объектами
# a, h и т. д.
# Предполагается, что переменная "condition" может
# принимать значения 1, 2, 3...
case condition
when 1
puts "Отмена."
s.abort # Изменения будут потеряны.
when 2
puts "Фиксируем и выходим."
s.commit # Изменения будут сохранены.
when 3
# Ничего не делаем...
end
puts "Транзакция дошла до конца."
# Изменения будут сохранены.
end
Внутри транзакции можно вызвать метод roots, который вернет массив корней (или метод root?, чтобы проверить принадлежность). Есть также метод delete, удаляющий корень.
store.transaction do |s|
list = s.roots # ["my_array","my_hash"]
if s.root?("my_tree")
puts "Найдено my_tree."
else
puts "He найдено # my_tree."
end
s.delete("my_hash")
list2 = s.roots # ["my_array"]
end
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Глава 24 Управление терминалами с помощью библиотеки S-Lang
Глава 24 Управление терминалами с помощью библиотеки S-Lang С помощью библиотеки S-Lang, написанной Джоном Дэвисом (John Е. Davis), можно осуществлять доступ к терминалам на среднем уровне. Все действия, связанные с управлением терминалами на низком уровне, осуществляются
Обеспечение удаленного доступа с помощью сервера VNC
Обеспечение удаленного доступа с помощью сервера VNC Средства X Window очень часто применяются для создания графической среды в системе Linux. Поскольку система X Window непосредственно разрабатывалась для работы в сети, ее очень удобно использовать в качестве инструмента
Обеспечение ссылочной целостности с помощью индексов
Обеспечение ссылочной целостности с помощью индексов В определении индекса имеется еще одна опция - UNIQUE. Если ее указать, то индекс позволит заносить в таблицу только уникальные значения. Фактически это служит основой для реализации уникальных ключей (UNIQUffi KEY).
Манипулирование данными с помощью объектов
Манипулирование данными с помощью объектов После создания таблиц можно приступить к манипуляциям с данными: вводить данные в таблицы, извлекать их из таблиц, проверять и изменять структуру таблиц. Для манипулирования структурой таблиц используются команды определения
1.8. Сборка статической библиотеки с помощью Boost.Build
1.8. Сборка статической библиотеки с помощью Boost.Build ПроблемаВы хотите использовать Boost.Build для сборки статической библиотеки из набора исходных файлов С++, таких как перечисленные в примере 1.1.РешениеВ директории, где вы хотите создать статическую библиотеку, создайте файл
1.9. Сборка динамической библиотеки с помощью Boost.Build
1.9. Сборка динамической библиотеки с помощью Boost.Build ПроблемаВы хотите использовать Boost.Build для сборки динамической библиотеки из набора исходных файлов С++, таких как перечисленные в примере 1.2.РешениеВ директории, где вы хотите создать динамическую библиотеку и, если
1.11. Сборка статической библиотеки с помощью IDE
1.11. Сборка статической библиотеки с помощью IDE ПроблемаВы хотите использовать IDE для сборки статической библиотеки из набора исходных файлов С++, таких как перечисленные в примере 1.1.РешениеОсновная процедура выглядит следующим образом.1. Создайте новый проект и укажите,
1.12. Сборка динамической библиотеки с помощью IDE
1.12. Сборка динамической библиотеки с помощью IDE ПроблемаВы хотите использовать IDE для сборки динамической библиотеки из набора исходных файлов С++, таких как перечисленные в примере 1.2.РешениеОсновная процедура выглядит следующим образом.1. Создайте новый проект и
15.4. Обеспечение невозможности модификации своих объектов в функции-члене
15.4. Обеспечение невозможности модификации своих объектов в функции-члене ПроблемаТребуется вызывать функции -члены для константного объекта, но ваш компилятор жалуется на то, что он не может преобразовать тип используемого вами объекта из константного в
Сериализация объектов с помощью SoapFormatter
Сериализация объектов с помощью SoapFormatter Следующим вариантом является тип SoapFormatter. Тип SoapFormatter сохраняет объектный граф в сообщении SOAP (Simple Object Access Protocol – простой протокол доступа к объектам), что делает этот вариант форматирования прекрасным выбором при передаче
Сериализация объектов с помощью XmlSerializer
Сериализация объектов с помощью XmlSerializer Вдобавок к SOAP и двоичному формату, компоновочный блок System.Xml.dll предлагает третий формат, обеспечиваемый типом System.Xml.Serialization. XmlSerializer который может использоваться для сохранения состояния данного объекта в виде "чистого" XML в
Обеспечение поддержки подписывания объектов в ваших классах
Обеспечение поддержки подписывания объектов в ваших классах Традиционно при необходимости доступа к объектам, содержащимся в коллекциях — например, массивах и словарях, — программисту требовалось получить доступ к методу в словаре или массиве, чтобы получить или
Обеспечение безопасности с помощью технологии, тренировки и процедуры
Обеспечение безопасности с помощью технологии, тренировки и процедуры Компании, которые проводят тесты на возможность проникновения, сообщают, что их попытки проникнуть в компьютерную систему компании с помощью методов социнженерии практически в 100% случаев удаются.