meridia online
valium online
zoloft online
cyclobenzaprine online
sonyericsson ringtones
cheap flexeril
online xanax
free nokia ringtones
cheap valium
wellbutrin online
sildenafil online
cheap zoloft
cheap valium
midi ringtones
cheap cialis
free qwest ringtones
free real ringtones
free real ringtones
free polyphonic ringtones
tracfone ringtones
ultracet online
cheap norco
free polyphonic ringtones
levitra online
ambien online
cheap sildenafil
cheap prozac
xanax
ortho online
funny ringtones
vicodin online
cheap phentermine
cheap norco
lortab online
cheap hydrocodone
cheap ativan
buy paxil
mono ringtones
valium
cheap tramadol
cheap zoloft
hydrocodone
cheap viagra
but albuterol
cheap rivotril
free verizon ringtones
lorazepam online
order viagra
cheap didrex
phentermine online
cingular ringtones
free ericsson ringtones
free sony ericsson ringtones
motorola ringtones
buy zanaflex
order flexeril
free samsung ringtones
nokia ringtones
cheap diazepam
free sonyericsson ringtones
lorazepam online
free real ringtones
cheap rivotril
ambien online
albuterol online
buy cialis
ambien online
sagem ringtones
norco online
cheap meridia
nexium online
free mono ringtones
hgh online
ultram online
ativan online
wellbutrin online
free ringtones
order diazepam
sprint ringtones
lortab online
carisoprodol online
verizon ringtones
clomid online
cheap xenical
order xanax
free ringtones
wellbutrin online
buy carisoprodol
tracfone ringtones
sharp ringtones
buy ativan
buy norco
free sony ericsson ringtones
free tracfone ringtones
sonyericsson ringtones
cheap soma
meridia online
buy zyban
online clonazepam
free music ringtones
cheap cyclobenzaprine
ativan online
paxil online
ativan online
but nexium
mp3 ringtones
hgh online
propecia online
free samsung ringtones
ortho
but zyban
free punk ringtones
lipitor online
mtv ringtones
cheap vigrx
lorazepam online
fioricet online
lorazepam online
free cool ringtones
free qwest ringtones
diazepam online
cheap tenuate
clonazepam online
buy fioricet
ativan online
clonazepam online
propecia online
free mp3 ringtones
hydrocodone online
carisoprodol online
didrex online
levitra online
nextel ringtones
zyban online
mp3 ringtones
levitra
celexa online
tracfone ringtones
cheap adipex
free free ringtones
free music ringtones
free nextel ringtones
free nokia ringtones
cheap levitra
free ringtones
cheap propecia
cheap nexium
online cialis
buy soma
mp3 ringtones
tramadol online
phentermine online
free funny ringtones
nexium online
wellbutrin online
cheap adipex
cheap cialis
cheap ultram
free alltel ringtones
funny ringtones
free funny ringtones
cheap celexa
real ringtones
free ringtones
samsung ringtones
viagra online
diazepam online
cheap ultram
vicodin online
buy alprazolam
cheap propecia
buy diazepam
free mp3 ringtones
cheap meridia
meridia online
nokia ringtones
adipex online
xenical online
hydrocodone
free cingular ringtones
free sagem ringtones
buy xanax
cheap lisinopril
funny ringtones
valium online
free tracfone ringtones
free samsung ringtones
ativan online
free kyocera ringtones
xanax
free mp3 ringtones
tramadol online
free motorola ringtones
samsung ringtones
adipex online
cheap xenical
pharmacy online online
real ringtones
cheap vicodin
ultram online ==Задача: библиотека мини-базы данных==
Описание
Создать библиотеку, предоставляющую возможность хранения данных на внешнем носителе. Библиотека должна предоставлять интерфейс для добавления/получения/удаления данных в/из файлов, управляемых библиотекой.
Задача 1
Функциональные требования
Библиотека должна предоставлять пользователю следующие возможности:
- Создание новой базы данных (одного или группы файлов со специфическим форматом).
- Сохранять пользовательские данные, заданные в виде ключ/значение в указанной базе данных.
- Библиотека должна осуществлять поддержку следующих типов для использования их в качестве ключей и значений:
- знаковое целое
- строка
- произвольные пользовательские данные, поддерживающие операцию serialize()
- Удалять элемент базы данных по указанному ключу.
- Предоставлять пользователю сохраненные данные, используя указанный ключ.
В случае, когда ожидаемая запись – пользовательский тип данных, восстановление из базы данных должно быть возможно при наличии у пользовательского класса операции deserialize().
- Предоставлять возможность навигации (итерации) по всем сохраненным данным.
Требования к эффективности
Замечание: тот факт, что данные должны храниться на внешнем носителе (при посредничестве файловой системы) говорит о том, что гарантии эффективности тех или иных операций предоставить невозможно. Этот раздел накладывает ограничения только на используемые алгоритмы.
- Вычислительная сложность открытия существующей базы данных должна быть не более чем N * log N.
- Вычислительная сложность получения данных по заданному ключу должна быть не более чем логарифмической.
- Операция возвращения следующего элемента (при итерации по всем элементам базы данных) должна обладать постоянной скоростью.
- Ограничений по эффективности на операции создания новой базы данных, помещения и удаления данных не накладывается.
Замечания по реализации
В качестве основы для реализации задачи предлагается использовать библиотеку
Berkley DB.
Соответствующий пакет Debian установлен на swsoft.nsu.ru, документация доступна по адресу
http://swsoft.nsu.ru/doc/db4.3-doc/
Версия для Windows доступна из НГУ по адресу
http://swsoft.nsu.ru/~fat/db-4.4.20.msi
Вместо Berkley DB можно использовать любую другую, которая удовлетворяет следующим условиям:
- Используемая библиотека не решает непосредственную задачу.
- Библиотека достаточно мобильна (т.е. работает, по крайней мере, на платформах Unix и Windows).
- Библиотека не имеет лицензионных ограничений, которые бы не позволяли ее использование в учебных проектах.
Требования к проекту
Проект должен включать следующую пользовательскую документацию:
- инструкция по сборке и установке;
- описания программного интерфейса библиотеки;
- рабочий пример использования библиотеки.
Задача 2
Данная задача предполагает введение следующих новых возможностей в реализацию первой:
- Поддержка возможности использования нескольких объектов, работающих с одной и той же базой данных как внутри одной нити исполнения так и в нескольких.
- Поддержка транзакций.
- Блокирование базы данных на уровне записей.
Следующий код (или функционально эквивалентный ему) должен работать правильно.