Какой самый простой способ сохранить карты / структуры в Clojure? - PullRequest
8 голосов
/ 15 июня 2009

Очевидный способ - загрузить поддержку JDBC из Clojure Contrib и написать некоторую функцию для преобразования карты / структуры в таблицу. Одним из недостатков этого является то, что он не очень гибкий; изменения в вашей структуре потребуют изменений DDL. Это подразумевает либо написание генерации DDL (жестко), либо миграцию с ручным кодированием (скучно).

Какие существуют альтернативы? Ответы должны быть ACID, исключающими сериализацию в файл и т. Д.

Ответы [ 6 ]

10 голосов
/ 11 января 2011

FleetDB - это база данных, реализованная в Clojure. Он имеет очень естественный синтаксис для работы с картами / структурами, например вставить:

(client ["insert" "accounts" {"id" 1, "owner" "Eve", "credits" 100}])

Затем выберите

(client ["select" "accounts" {"where" ["=" "id" 1]}])

http://fleetdb.org/

8 голосов
/ 16 июня 2009

Один из вариантов сохранения карт в Clojure, в котором по-прежнему используется база данных отношений, - хранить данные карты в непрозрачном блобе. Если вам нужна возможность поиска записей, вы можете хранить индексы в отдельных таблицах. Например, вы можете прочитать, как FriendFeed хранит данные без схемы поверх MySQL - http://bret.appspot.com/entry/how-friendfeed-uses-mysql

Другим вариантом является использование модели Entity-Attribute-Value (EAV) для хранения данных в базе данных. Вы можете прочитать больше о EAV в Википедии (я бы опубликовал ссылку, но я новый пользователь и могу опубликовать только одну ссылку).

Еще одним вариантом является использование BerkeleyDB для Java - это нативное решение Java, обеспечивающее ACID и блокировку на уровне записи. (Та же проблема с размещением ссылки).

6 голосов
/ 16 июня 2009

Использование Java-клиента CouchDB lib и clojure.contrib.json.read/write работает достаточно хорошо для меня. Однако гарантии согласованности CouchDB могут быть недостаточно сильны для ваших целей.

2 голосов
/ 08 июля 2009

Вы можете попробовать одну из графических баз данных на основе Java, например Neo4J . Возможно, будет легко закодировать интерфейс hashmap, чтобы он был достаточно прозрачным.

2 голосов
/ 15 июня 2009

Clj-запись - это реализация активной записи в ближайшем будущем, которая может вас заинтересовать.

1 голос
/ 09 января 2011

MongoDB и его структура congomongo (lein: [congomongo "0.1.3-SNAPSHOT"]) работает для меня. Это невероятно приятно с базами данных без схемы, и с congomongo довольно легко ладить. MongoDB добавляет поле _id в каждый документ для его идентификации, и между clojure-maps и mongo-maps существует довольно хорошая прозрачность.

https://github.com/somnium/congomongo

РЕДАКТИРОВАТЬ: я бы не использовал MongoDB сегодня. Я бы предложил вам использовать транзит . Я бы использовал JSON, если его поддерживает бэкэнд (Postgres и т. Д.), Или кодировку msgpack, если вы хотите иметь более компактную двоичную кодировку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...