Разработка альтернативы SQL?

Не делай этого. Если освободившаяся память будет перераспределена на что-то другое между вызовами free, то все будет испорчено.

5
задан user10955 1 June 2009 в 05:33
поделиться

4 ответа

Я подозреваю, что лучший способ обойти это - создать переводчик между вашим языком и SQL, главным образом потому, что вы не сможете получить больше функциональных возможностей от rdbms, чем то, что предоставляется через его диалект SQL.

Существование MySQL не имеет ничего общего со сложностью работы, выполняемой механизмами хранения, механизмами хранения в MySQL ] действительно выполняет большую часть рутинной работы, предоставляя MySQL анализировать и оптимизировать SQL и извлекать данные из движка, соблюдая соответствующую семантику движка.

Большинство rdbms не открывают механизмы хранения для пользователей / администраторов, поэтому в этом отношении MySQL является в некотором роде уникальным, что делает более разумным создание переводчика таким образом, чтобы вы '

5
ответ дан 18 December 2019 в 10:48
поделиться

Многие продукты rdbms традиционно строились на пакетах isam - очевидный пример - mysql. Все они работают на уровне определения таблиц и индексов, перебора строк и т. Д .; с базовыми средствами для обработки операций чтения, записи, блокировок и т. д.

Кроме того, в большинстве продуктов isam требовалось добавлять поверх них уровни SQL из соображений конкуренции. Вы можете начать поиск в Google примеров, где может быть доступен уровень SQL.

1
ответ дан 18 December 2019 в 10:48
поделиться

В Practical Common Lisp , эта глава нацелена на простой интерфейс стиля RDBS к базе данных Music. Может помочь.

1
ответ дан 18 December 2019 в 10:48
поделиться

Это не займет у вас много времени, если вы на самом деле напишете его на лиспе. Я написал простой движок базы данных на Лиспе примерно за полдня. Вот пример того, как это выглядит:

(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))

Крутая вещь в том, чтобы сделать это таким образом (на самом деле в Лиспе, а не просто использовать синтаксис, подобный Лиспу), заключается в том, что вы получаете компиляцию бесплатно. В моей системе приведенный выше код не интерпретируется ядром базы данных, это ' на самом деле это скомпилированная часть программы (не можете сделать это в C, теперь можете?). В результате он работает быстро, даже несмотря на то, что сам код базы данных (код для «select» и определения таблиц) занимает всего несколько строк. База данных полностью резидентна в памяти, но это не имеет значения ... вы можете просто изменить макрос для размещения внешних баз данных и даже написать, что он использует индексы. Он был достаточно хорош для проекта, над которым я работал, поэтому я не добавил индексов или чего-то особенного.

Мне больше всего нравится то, что, хотя он сохраняет всю лаконичность SQL, код ничем не отличается от кода вокруг него, потому что это все Лисп. Вы можете вводить переменные в свой поисковый запрос, не беспокоясь об их цитировании.

даже несмотря на то, что сам код базы данных (код для определений select и таблицы) занимает всего несколько строк. База данных полностью резидентна в памяти, но это не имеет значения ... вы можете просто изменить макрос для размещения внешних баз данных и даже написать, что он использует индексы. Он был достаточно хорош для проекта, над которым я работал, поэтому я не добавил индексов или чего-то особенного.

Мне больше всего нравится то, что, хотя он сохраняет всю лаконичность SQL, код ничем не отличается от кода вокруг него, потому что это все Лисп. Вы можете вводить переменные в свой поисковый запрос, не беспокоясь об их цитировании.

даже несмотря на то, что сам код базы данных (код для определений select и таблицы) занимает всего несколько строк. База данных полностью резидентна в памяти, но это не имеет значения ... вы можете просто изменить макрос для размещения внешних баз данных и даже написать, что он использует индексы. Он был достаточно хорош для проекта, над которым я работал, поэтому я не добавил индексов или чего-то особенного.

Мне больше всего нравится то, что, хотя он сохраняет всю лаконичность SQL, код ничем не отличается от кода вокруг него, потому что это все Лисп. Вы можете вводить переменные в свой поисковый запрос, не беспокоясь об их цитировании.

вы можете просто изменить макрос для работы с внешними базами данных и даже написать, что он использует индексы. Он был достаточно хорош для проекта, над которым я работал, поэтому я не добавил индексов или чего-то особенного.

Мне больше всего нравится то, что, хотя он сохраняет всю лаконичность SQL, код ничем не отличается от кода вокруг него, потому что это все Лисп. Вы можете вводить переменные в свой поисковый запрос, не беспокоясь об их цитировании.

вы можете просто изменить макрос для работы с внешними базами данных и даже написать, что он использует индексы. Он был достаточно хорош для проекта, над которым я работал, поэтому я не добавил индексов или чего-то особенного.

Мне больше всего нравится то, что, хотя он сохраняет всю лаконичность SQL, код ничем не отличается от кода вокруг него, потому что это все Лисп. Вы можете вводить переменные в свой поисковый запрос, не беспокоясь об их цитировании.

9
ответ дан 18 December 2019 в 10:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: