r20 - 26 Sep 2015 - 18:45:44 - Sergej ZnamenskijYou are here: TWiki >  IS4UGP Web > DatabaseWork

Работа с базой данных

Для хранения данных используется БД Tokyo Cabinet.

Визуальное представление записи в базе данных

Общее представление

Каждая запись в базе состоит из ключа записи и её значения, и то и другое являются строками произвольной длины.

Ключ записи конкатенируется из

  • логического ключа ( ЛК - это начало КЗ ), начинающегося на заглавную букву если данное первичное и на строчную если системное
  • указания времени его появления,
  • указания автора записи либо специфической информации о её происхождении,

Пример записи:


   W0/D0/Spec1/S4/h/p  F9SAfg /L/tiel: 34
   

Здесь:

Часть ключа Пояснение
W0/D0/Spec1/S4/h/p F9SAfg /L/tiel ключ записи
34 значение записи
W0/D0/Spec1/S4/h/p логический ключ
F9SAfg указания времени его появления
tiel указания автора записи либо специфической информации о её происхождени

Контекст данных

Идентификатор контекста данных отделяется символом '/'.

В нашем примере:

Контекст Пояснение
W0 университет
W0/D0 учебная часть
W0/D0/Spec1 специальность прикладная математика в УГП
W0/D0/Spec1/S4 Дисциплина Геометрия и алгебра этой специальности
W0/D0/Spec1/S4/h нагрузка в часах по этой дисциплине
W0/D0/Spec1/S4/h/p конкретно по практическим занаятием

С полным описанием каждого контекста можно ознакомиться в ТзЛоции в разделе "Контексты и фрагменты страничек";

Время записи

После логического ключа через символ табуляции в ключе записи указан штамп времени создания записи. Время указано в компактном формате. Первым идет цифра или буква года

2001 1
2009 9
2010 A
2015 F

затем могут следовать шестнадцатиричная цифра месяца, затем цифра или буква числа месяца, цифра или буква часа, цифра или буква минут, цифра или буква символа секунд и два символа миллисекунд время начала записи, следом за ним время окончания записи ключа.

05.2014 D5
10.2014 DA
26.09.2015 13:40:41 F9SAfg

Если данное изменялось в течение промежутка времени, то через запятую указывается диапазон. Например,

26.09.2015 13:40:41 - 26.09.2015 13:40:43 F9SAfg,F9SAfi
03.07.2017 15:35:00.207 - 03.07.2017 15:35:01 H73Fa047,H73Fa100

Более подробная информацию см. в файле SmartStamp.pm.

Такое построение штампов гарантирует правильный порядок записей и упрощает работу с историей изменений.

Автор записи и формат значения

Автор записи определяется по логину в системе.

Если значение является строкой, не заканчивающейся пробелом, то в базе к ней добавлен пробел в конце. Пустая строка в качестве значения в базе говорит о том, что данное удалено. Значение, являющееся структурой данных записано в формате JSON без пробела в конце.

Чтение из базы данных

Чтение значения из базы данных осуществляется методом val. Аргумент вызова
  • логический ключ
Для чтения ранее сохранённого занчения можно использовать дополнительный аргумент
  • штамп времени
При этом будет выдано актуальное на заданный момент (с учётом возможного последующего редактирования в этом промежутке) значение.

Для использования метода val необходимо подключить модуть Auth (или DBI):


   use Apache2::Auth;
   

Если в параметрах функции передать только логический ключ, функция вернет актуальное (самое последнее) записанное значение данного логического ключа.

Пример:


   $edu->val("W0/D0/Spec1/S4/h/p");

получаем:

          '34'
 

Если нужен полный ключ, то вместо val используется key


   $edu->val("W0/D0/Spec1/S4/h/p");
      возвращает "W0/D0/Spec1/S4/h/p  F9SAfg /L/tiel";

Сохранение в базе данных

Сохранение в базе данных производится методом. Для использования метода write также необходимо подключить тот же модуль

Метод имеет два аргумента:

  • логический ключ
  • значение ключа

Пример:


   $edu->write("W0/D0/Spec1/S4/h/p","36");

В базу запишется ключ с штампом, учитывающем время генерации формы, что исключит искажение истории изменений.

Учёт конкурентности доступа при организации записи и чтения

При доработке интерфейсов необходимо учитывать, что одновременно читать и писать базу разным пользователям нельзя.

Edit | WYSIWYG | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r20 < r19 < r18 < r17 < r16 | More topic actions
 
Powered by TWiki

This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback