Поддержка в БД нескольких таблиц и распределение данных таблицы.
Корневая директория для данных получается из property System.getProperty("fizteh.db.dir")
. В корневой директории
располагаются поддиректории, чьи имена соответствуют именам таблиц. Директория таблицы может содержать до 16
директорий: 0.dir, 1.dir, 2.dir, ..., 15.dir
. Внутри каждой директории может быть до 16 файлов с именами:
0.dat, 1.dat, 2.dat, ..., 15.dat
. Данные распределяются по файлам строго оговоренным ниже образом.
Файлы и директории должны быть непустыми. Если файл или директория опустели, они удаляются.
Кроме того, приложение должно поддерживать дополнительные команды для работы с таблицами.
create tablename
Создать новую таблицу. Создается соответствующая директория. Если успешно:
created
Если такая таблица уже существует:
tablename exists
drop tablename
Удалить таблицу. Директория таблицы удаляется с диска. Если успешно:
dropped
Если такой таблицы не существует:
tablename not exists
use tablename
Использовать указанную таблицу для последующих операций работы с данными.
Если таблицы не существует:
tablename not exists
Если переключение прошло успешно:
using tablename
Если пользователь пытается провести операции с данными, когда база еще не выбрана:
no table
Пара ключ-значение записывается в соответствующий файл по следующему правилу:
hashcode = key.hashCode()
ndirectory = hashcode % 16
nfile = hashcode / 16 % 16
Пара ключ-значение записывается в соответствующий файл по следующему правилу:
byte = key.bytes[0]
ndirectory = byte % 16
nfile = byte / 16 % 16
- При запуске приложения нужно убедиться, что директория, в которой предлагается работать, существует.
- Также следует проверить, что корневая директория и поддиректории действительно директории, а не файлы.
- При чтении из файлов нужно проверять их валидность, избегать слишком больших и маленьких значений буферов.
- При чтении из файла можно проверять, что читаемые ключи действительно должны принадлежать именно к этому файлу.
- Бинарный формат и соотношение ключ-файл должны быть строго соблюдены.
- Протокол интерактивной работы должен быть строго соблюден.
- Приложение должно поддерживать русские буковки.
- Неразумно на каждый запрос писать в файл и читать из файла.