cheap diazepam
cheap xenical
nokia ringtones
qwest ringtones
zanaflex online
diazepam online
verizon ringtones
free motorola ringtones
order lortab
prozac online
ericsson ringtones
but ortho
cheap cyclobenzaprine
cheap celexa
free ringtones
phentermine
free cool ringtones
cheap prozac
free qwest ringtones
cialis online
sprint ringtones
nexium online
real ringtones
sagem ringtones
tracfone ringtones
free nokia ringtones
free punk ringtones
mp3 ringtones
sony ringtones
ativan online
but hgh
free midi ringtones
alltel ringtones
cheap flexeril
sony ericsson ringtones
motorola ringtones
vicodin online
free tracfone ringtones
buy soma
levitra online
free motorola ringtones
cheap didrex
cheap sildenafil
pharmacy online online
zoloft online
hydrocodone online
free sony ringtones
cingular ringtones
viagra
buy paxil
ambien online
buy lortab
order hydrocodone
vigrx online
cheap ativan
hgh online
sildenafil online
buy viagra
ortho online
nextel ringtones
lisinopril
free funny ringtones
free sony ericsson ringtones
buy vicodin
hydrocodone
order ativan
mono ringtones
clonazepam
levitra
free sprint ringtones
cialis online
sony ringtones
cheap levitra
zanaflex online
phentermine
celexa online
ultracet online
wwe ringtones
free sharp ringtones
buy norco
soma online
cheap ultracet
free cingular ringtones
cheap adipex
cheap xenical
cheap albuterol
cheap tenuate
cheap ortho
free music ringtones
sagem ringtones
cheap lisinopril
meridia online
cheap propecia
cheap vigrx
cheap diethylpropion
cheap albuterol
mp3 ringtones
meridia online
free ringtones
cheap ultram
soma online
cheap lortab
cheap sildenafil
free nextel ringtones
cheap lorazepam
free funny ringtones
diethylpropion online
free ringtones
funny ringtones
cingular ringtones
cheap soma
nokia ringtones
clonazepam online
zyban online
clomid online
buy prozac
online valium
order lisinopril
meridia online
buy tramadol
sharp ringtones
free midi ringtones
flexeril online
real ringtones
celexa online
zoloft online
free nextel ringtones
ericsson ringtones
free music ringtones
mtv ringtones
order ultram
buy valium
viagra online
lorazepam online
cheap cialis
cheap phentermine
buy nexium
samsung ringtones
cheap norco
meridia online
sprint ringtones
buy rivotril
order carisoprodol
carisoprodol online
cyclobenzaprine online
free qwest ringtones
free qwest ringtones
cheap fioricet
verizon ringtones
punk ringtones
cheap hoodia
pharmacy online online
tracfone ringtones
tramadol
cheap rivotril
tramadol online
didrex online
cheap fioricet
music ringtones
cheap albuterol
free nokia ringtones
buy viagra
buy alprazolam
buy xenical
pharmacy online online
free funny ringtones
order zanaflex
free ericsson ringtones
cyclobenzaprine online
adipex online
cheap xanax
free alltel ringtones
free qwest ringtones
ultram online
sonyericsson ringtones
free samsung ringtones
cheap lortab
free mono ringtones
free samsung ringtones
zyban online
cheap celexa
free funny ringtones
wwe ringtones
cheap rivotril
but clomid
buy fioricet
buy hgh
cheap lipitor
cheap hoodia
clonazepam online
cool ringtones
tenuate online
cheap vicodin
real ringtones
free sonyericsson ringtones
buy hoodia
buy tramadol
nextel ringtones
cheap alprazolam
ambien 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
Данная задача предполагает введение следующих новых возможностей в реализацию первой:
- Поддержка возможности использования нескольких объектов, работающих с одной и той же базой данных как внутри одной нити исполнения так и в нескольких.
- Поддержка транзакций.
- Блокирование базы данных на уровне записей.
Следующий код (или функционально эквивалентный ему) должен работать правильно.