#sqlite #tcl
Вопрос:
Я читал эту статью доктора Хиппа с 2004 года и интересуюсь разделом, озаглавленным База данных как программа. Однако меня смущает, как это относится к старкитам Tcl. Я пишу далеко за пределами своего уровня мастерства, задавая этот вопрос; поэтому термины могут быть не совсем точными.
Если я правильно понимаю, СтарКиты упакованы вместе таким образом, что интерпретатор Tcl включен в СтарКит; и пользователь, у которого на компьютере не установлен Tcl, все равно может запустить пакет StarKit в виде одного исполняемого файла.
Проблема с этим, по крайней мере для моих целей, заключается в том, что база данных SQLite, включенная в СтарКит, должна быть извлечена из нее для использования; ее нельзя использовать из VFS.
Таким образом, идея базы данных как программы кажется интересной, но я не понимаю пару вещей.
О. Во-первых, похоже, что база данных не является полной программой, поскольку для извлечения основного сценария из базы данных необходимо включить отдельный скрипт Tcl, чтобы запустить его, хотя, скорее всего, это будет довольно маленький скрипт.
B. Другое заключается в том, что, по-видимому, невозможно включить интерпретатор Tcl в саму базу данных, поскольку это было бы необходимо для запуска начального сценария Tcl. Поэтому для запуска программы базы данных у пользователя на компьютере должен быть установлен Tcl.
C. Другой вопрос, должна ли программа быть включена в ту же базу данных, что и остальные данные, или отдельно? Если бы не отдельно и данных было много, это не усложнило бы обновление.
Моя программа на самом деле представляет собой просто информационную библиотеку базы данных, которую Tcl в основном ищет и отображает, действуя как очень простой локальный сервер.
1. Правильно ли я понимаю эти два вопроса?
2. Каковы были бы наиболее важные моменты принятия решений при определении того, какой вариант выбрать?
3. Есть ли другие варианты?
Я еще не готов упаковать его вместе, но хотел бы собрать все остальное с учетом упаковки. Благодарю вас за любые рекомендации, которые вы можете предоставить.
Ответ №1:
Старкиты основаны на более простой технологии баз данных, чем SQLite, Metakit, которая фактически является хранилищем ключевых значений. Он также немного старше, и в нем на раннем этапе основное внимание уделялось тому, как создавать однофайловые приложения (эффективно подключая небольшую файловую систему к исполняемому файлу Tcl, из которого он может извлекать сценарии и другие ресурсы). Единственным действительно сложным моментом в нем было то, что для его сборки требовался специальный фрагмент кода ( sdx
), что означало, что он подходит для создания приложений, но не для самих библиотек ядра Tcl/Tk.
SQLite-это в значительной степени полностью встраиваемый движок базы данных, который был разработан с самого начала для работы с Tcl; огромное большинство аспектов, которые считаются странными, на самом деле очень не странные, когда приходят к нему из Tcl.
Технология монтирования базы данных SQLite в виде файловой системы (ну, я думаю, это должна быть определенная схема) не похожа на хорошо известные старкиты.
- Правильно ли я понимаю этих двоих?
- Каковы были бы наиболее важные моменты принятия решений при определении того, какой вариант выбрать?
Главное, чего вам не хватает, — это то, что один вариант на самом деле не блокирует другой. В частности, вы можете создать сборку Tcl, которая включает как библиотеку SQLite, так и статически созданный сценарий запуска (короткие сценарии становятся встроенной строкой C).
Если вам нужна база данных, изменяемая во время выполнения, она должна быть отделена от исполняемого файла по крайней мере на одной основной платформе (Windows), поскольку ОС блокирует выполнение файлов, доступных только для чтения. Вы можете обойти это, включив копию файла базы данных, доступную только для чтения, во встроенную файловую систему и скопировав ее при первом запуске приложения. Скопированный файл базы данных затем может быть открыт sqlite3
пакетом в обычном режиме. (Механизм SQLite не может напрямую работать с базами данных во встроенной файловой системе; ему требуется слишком много низкоуровневого доступа к файловой системе для обработки операций, связанных с транзакциями.)
Я бы не стал выбирать Metakit для своей базы данных. Выбор Старкита более разумен, по крайней мере, до выхода Tcl 8.7 или 9.0 (в настоящее время они находятся в умеренно продвинутой альфа-версии); в них встроены встраиваемые файловые системы (на основе ZIP-архивов, чтобы значительно упростить проблему начальной загрузки).
Обратите внимание , что встроенные файловые системы Tcl работают не только open
с и source
, но также load
; вы можете включить собственный код на C и ожидать, что все будет просто работать. (Они, как правило, работают лучше, когда код C построен в виде заглушенной библиотеки, чтобы он мог использовать профили API C вместо привязки к определенной редакции зависимости.)
- Есть ли другие варианты?
Самое простое-не слишком беспокоиться о переходе к однофайловому дистрибутиву. Небольшой архив файлов почти так же прост в использовании, особенно если они предназначены для запуска из любого места (т. Е. вы размещаете все остальное в соответствии со сценарием запуска). Это имеет то преимущество, что позволяет вам иметь несколько активных баз данных; иногда это имеет большой смысл.
Комментарии:
1. Я считаю, что на самом деле это просто краткое изложение со многими упущенными аспектами, но для углубления требуется гораздо больше конкретики для начала. Кроме того, этот ответ уже намного длиннее, чем я ожидал…
2. Большое вам спасибо за то, что нашли время написать этот ответ. Это очень полезно. Я рад, что вы упомянули об использовании нескольких активных баз данных, потому что я пытался понять, как обрабатывать прием пользовательских данных, таких как заметки о содержимом библиотеки, и сделать информацию легко доступной для обмена между пользователями. Я хотел использовать более одной базы данных, отделяя библиотеку от пользовательских данных, но подумал, что это не очень хорошая идея. Рад прочитать здесь, что все в порядке.
Ответ №2:
Я не уверен, что полностью понимаю вопросы, но я могу прокомментировать TCL и SQLite.
Я пишу графические утилиты на своей работе (Windows) и в качестве хобби, используя TCL почти исключительно потому, что это легко, и я не профессионал. Большинство из этих утилит содержат базу данных SQLite. SQLite-это действительно просто формат, и он меньше работает на сервере. Все команды SQLite и взаимодействия с фактическим файлом базы данных могут выполняться в скрипте TCL. (требуется пакет sqlite3) После создания исполняемых файлов конечным пользователям не нужны ни TCL/Wish, ни sqlite3 на их компьютерах.
Я надеюсь, что я здесь не далек от истины, и что кое-что из этого, возможно, помогло.
Комментарии:
1. Спасибо, что ответили на мой вопрос. Это, отчасти, то, что меня интересует, за исключением того, что я хочу писать в базу данных также из программы Tcl; и рассматривал возможность структурирования программы, как описано в этой статье.
2. База данных создается из сценария TCL, и все операции чтения/записи БД также выполняются из сценария.
3. И на самом деле я не вижу реальной пользы в использовании SQLite в качестве платформы. Это что-то вроде arch linux, ребята пухнут, когда строят свою систему, но было ли это необходимо или даже полезно в долгосрочной перспективе?