Встроенная (чистая Java) база данных для Clojure
Мне нужна встроенная база данных для приложения Clojure. Может быть, это те же критерии, что и для любого другого Java-приложения, но я все равно получаю мнение других людей. Я не выбираю SQLite, потому что это не чистая Java, поэтому распространение автономного приложения становится намного сложнее. Кажется, путь - Apache Derby. Что-нибудь еще, что я должен рассмотреть?
8 ответов
Без сомнения, H2
Вот настройки,
(def demo-settings
{
:classname "org.h2.Driver"
:subprotocol "h2:file"
:subname (str (System/getProperty "user.dir") "/" "demo")
:user "sa"
:password ""
}
)
А затем обычный код SQL Clojure:
(with-connection demo-settings
(create-table :DEMO_TABLE
[:M_LABEL "varchar(120)"]
[:M_DATE "varchar(120)"]
[:M_COMMENT "varchar(32)"]))
Вы смотрели на FleetDB? Это база данных Clojure с протоколом JSON и клиентами на нескольких языках. Я подозреваю, что вы могли бы запустить его встроенным, не слишком усердно работая над ним
Я использовал встроенную базу данных H2 в clojure и использовал clojureQL для доступа к ней. Имейте в виду, что поскольку база данных находится в процессе, вы не должны использовать ее для большого количества записей (> 10000 в одной таблице), так как вы получите огромные проблемы с производительностью, поскольку база данных и ваш код будут совместно использовать одну и ту же JVM
Я думаю, что Derby делает превосходную 100% встроенную базу данных Java, и она полезна для широкого спектра приложений, хорошо поддерживается активным сообществом и очень хорошо документирована.
Я использую https://github.com/clojurewerkz/archimedes который позволяет вам указать бэкэнд позже.
Если вы не возражаете против NOSQL, neo4j - это встраиваемый граф БД с транзакциями, лицензированный по лицензии GPL. Самые последние привязки, которые я нашел, - это https://github.com/hgavin/borneo
Существует также интересный проект Graph DB в Clojure с подключаемыми бэкэндами: https://github.com/flatland/jiraph
Возможно, стоит взглянуть на еще довольно молодой, но многообещающий OrientDB: http://www.orientechnologies.com/orient-db.htm
http://github.com/eduardoejp/clj-orient
Тогда есть http://jdbm.sourceforge.net/
Другим вариантом, который стоит рассмотреть, является хранилище ключей и значений Chronicle Map, потому что это чистая Java и обеспечивает ванильную Java. Map
интерфейс, поэтому работать с ним должно быть очень просто, используя Clojure.