Skip to content

Latest commit

 

History

History
91 lines (72 loc) · 3.92 KB

04-MultiFileHashMap.md

File metadata and controls

91 lines (72 loc) · 3.92 KB

MultiFileHashMap

Поддержка в БД нескольких таблиц и распределение данных таблицы.

Корневая директория для данных получается из 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

create tablename

Создать новую таблицу. Создается соответствующая директория. Если успешно:

created

Если такая таблица уже существует:

tablename exists

drop

drop tablename

Удалить таблицу. Директория таблицы удаляется с диска. Если успешно:

dropped

Если такой таблицы не существует:

tablename not exists

use

use tablename

Использовать указанную таблицу для последующих операций работы с данными.

Если таблицы не существует:

tablename not exists

Если переключение прошло успешно:

using tablename

Если пользователь пытается провести операции с данными, когда база еще не выбрана:

no table

Вариант 1

Пара ключ-значение записывается в соответствующий файл по следующему правилу:

hashcode = key.hashCode()
ndirectory = hashcode % 16
nfile = hashcode / 16 % 16

Вариант 2

Пара ключ-значение записывается в соответствующий файл по следующему правилу:

byte = key.bytes[0]
ndirectory = byte % 16
nfile = byte / 16 % 16

Подводные камни

  • При запуске приложения нужно убедиться, что директория, в которой предлагается работать, существует.
  • Также следует проверить, что корневая директория и поддиректории действительно директории, а не файлы.
  • При чтении из файлов нужно проверять их валидность, избегать слишком больших и маленьких значений буферов.
  • При чтении из файла можно проверять, что читаемые ключи действительно должны принадлежать именно к этому файлу.
  • Бинарный формат и соотношение ключ-файл должны быть строго соблюдены.
  • Протокол интерактивной работы должен быть строго соблюден.
  • Приложение должно поддерживать русские буковки.
  • Неразумно на каждый запрос писать в файл и читать из файла.