Pull to refresh

Файловая база данных

Reading time2 min
Views13K
«… Один из краеугольных камней архитектуры Inferno — юниксовая идея с файлами-устройствами доведена до предела: в Inferno файлами представлено абсолютно всё… »powerman. А как, в свете вышесказанного, может выглядеть база данных?


Знакомясь с возможностью многоязычного пользовательского интерфейса в программе wm/calendar я случайно столкнулся с возможной реализацией…

В ОС Inferno есть интересный способ представления баз данных — в виде файловой системы. Для этого используются команды dbfs, rawdbfs – которые монтируют базу данных как файловую систему.
Возьмем, для примера, базу календаря(wm/calendar):

rawdbfs -e user/inferno/cal /mnt/schedule

cмонтирует в папку /mnt/schedule базу данных из файла user/inferno/cal(если файл cal не существовал – он будет создан, благодаря ключу -e). В точке монтирования будет сгенерирован список файлов, где каждый файл соответствует одной записи в БД. Благодаря этому с записями базы можно работать создавая и удаляя, записывая и считывая соответствующие файлы. Записывая в файл NEW создаются новые записи:

% echo 20071107 1 > /mnt/schedule/new

в пустой безе создали первую запись, чтобы проверить:

% ls /mnt/schedule

/mnt/schedule/0
/mnt/schedule/new

наша запись номер ноль:

% cat /mnt/schedule/0

20071107 1

Основное различие между dbfs и rawdbfs в способе хранения данных. В первом случае, используется обыкновенный текстовый файл, где записи разделяются пустой строкой; во втором, специальный формат, позволяющий не переписывать весь файл БД, при изменении одной только записи, что хорошо для Flash накопителей.
В Inferno имеются другие базы данных: существуют модули dbm, attrdb которые работают со своими «форматами»; а также модуль dbsrv, который позволяет обращается к БД основной операционной системы(в случае, если Inferno используется как гостевая ОС).
Tags:
Hubs:
+5
Comments17

Articles