Это не займет у вас много времени, если вы на самом деле напишете это в lisp. Я написал простой движок базы данных на Лиспе примерно во второй половине дня. Вот пример того, как это выглядит:
(select movies (<= 1990 year 2000) (member director '(terry-gilliam tim-burton)))
Здесь «select» - это макрос. Он просматривает предикаты, которые следуют за ним, для символов, которые являются именами полей, и связывает их с полями в базе данных. Затем он пишет функцию, которая связывает эти поля со значениями записи, переданной функции, и фильтрует таблицу, используя эту функцию. Макрос раскрывается примерно так:
(flet ((filter (item)
(let ((year (movie-year item))
(director (movie-director item)))
(and (<= 1990 year 2000)
(member director '(terry-gilliam tim-burton))))))
(loop for item in movies
if (filter item) collect item))
Крутая вещь в том, чтобы делать это таким образом (на самом деле в Lisp, а не просто используя подобный Lisp синтаксис), это то, что вы получаете компиляцию бесплатно. В моей системе приведенный выше код не интерпретируется ядром базы данных, это фактически скомпилированная часть программы (не можете сделать это в C, теперь вы можете?). В результате это происходит быстро, хотя сам код базы данных (код для выбора и определения таблиц) занимает всего несколько строк. База данных полностью запоминает память, но это не имеет значения ... вы можете просто изменить макрос для размещения внешних баз данных и даже написать его, используя индексы. Это было достаточно для проекта, над которым я работал, поэтому я не добавлял индексы или что-то необычное.
Моя любимая часть в том, что, хотя он сохраняет всю лаконичность SQL, код ничем не отличается от кода вокруг него, потому что он весь Lisp. Вы можете вводить переменные в поисковый запрос, не беспокоясь о том, чтобы их цитировать.