Я пытаюсь реализовать базу данных в виде таблицы Lua. Используя metatables, эта таблица будет пустой, и когда элемент будет запрошен или изменен в таблице, он вернет или изменит элемент в базе данных. Сама база данных никогда не будет загружена в память, за исключением запрашиваемых частей. Он должен взаимодействовать с программой как с таблицей (как с таблицей). Таблица, так как это только «фронт», сохранит измененные данные в базе данных (а не определяет этот элемент в таблице).Lua table как интерфейс к базе данных
В таблице без таблиц внутри нее это легко реализовать. Я пытаюсь заставить его работать с многоуровневой таблицей неопределенной глубины. (За исключением: База данных Я рассматриваю это Redis В идеале это может быть реализовано для любой базы данных или базы данных, как сервер с помощью только изменения основного рабочего синтаксиса.).
Из-за поведения метатаблицы Lua, метод __newindex
используется только тогда, когда что-то изменяется на верхнем уровне (или создается, если вы используете прокси). Метод __index
вызывается, когда что-то читается, даже если вызов состоит в том, чтобы что-то изменить в подкатегории. Из-за этого я пытаюсь написать метод __index
, который, когда запрашивается таблица, возвращает еще один псевдопрокси (таблица проксирования базы данных, а не другие таблицы) с тем же поведением, за исключением прокси для таблицы/array/list на верхнем уровне и т. д. до неопределенной глубины. Я борюсь.
Мои вопросы:
- ли это было реализовано раньше?
- Должен ли я сосредоточиться на «правильной» системе классов, а не на том, что я сейчас делаю?