Когда я должен использовать Datomic?
я заинтригован в службе базы данных Datomic, но я не уверен, что он соответствует потребностям проектов, над которыми я работаю. Когда Datomic является хорошим выбором, и когда его следует избегать?
4 ответа:
с условием, что я не использовал Datomic в производстве, думал, что дам вам ответ.
преимущества
- запросы Datalog являются мощными (более того, чем нерекурсивный SQL) и очень выразительными.
- запросы могут быть написаны с помощью структур данных Clojure, и это не слабый DSL, как многие библиотеки SQL, которые позволяют выполнять запросы со структурами данных.
- он неизменен, поэтому вы получаете преимущества, которые дает вам неизменность Clojure/другие языки, а также a. это также позволяет хранить, сохраняя структуры, все прошлые факты в вашей базе данных-это очень полезно для аудита и многое другое
недостатки
- Это может быть медленно, так как Datalog просто будет медленнее, чем эквивалентный SQL (предполагая, что эквивалентный оператор SQL может быть написан).
- если вы много пишете, вам, возможно, придется беспокоиться о том, что один транзактор будет перегружен. Это кажется маловероятным в большинстве случаев, но это то, о чем нужно думать (вы могли бы сделать своего рода осколок, хотя и, вероятно, сохранить себя; но это не БД, например, для хранения данных биржевого тика).
- немного сложно встать и работать с ним, и это дорого, а лицензирование и цена затрудняют использование размещенного экземпляра с ним: вам нужно будет иметь дело с sysadminning это самостоятельно, а не использовать что-то вроде Postgres на Heroku или Mongo в MongoHQ
Я уверен, что Мне не хватает некоторых с каждой стороны, и хотя у меня есть 3 перечисленных в разделе недостатки, я думаю, что преимущества перевешивают их в более сложных обстоятельствах, когда недостатки не исключают его использования. Цена, вероятно, тот, который будет препятствовать его использованию в большинстве небольших проектов (что вы ожидаете пережить 1 год бесплатной пробной версии).
Cf. это короткий пост описание Datomic просто для получения дополнительной информации.
выразительность (c. f. Datalog) и неизменность являются потрясающий. Это так весело работать с Dataomic в этом отношении, и вы можете сказать, что это мощный, просто используя его немного.
одна важная вещь при рассмотрении того, подходит ли Datomic для вашего приложения, - это думать о форме данных, которые вы собираетесь хранить и запрашивать - поскольку факты Datomic на самом деле очень похожи на троек RDF (+ понятие времени первого класса), он очень хорошо подходит для моделирования сложных отношений (связанных графических данных) - то, что часто громоздко с традиционными базами данных SQL. Я нашел этот аспект одним из самых привлекательных и важных для меня, он действительно работал ну, даже если это, конечно, не что-то эксклюзивное для Datomic, так как есть много других высококачественных предложений для графовых баз данных, нужно упомянуть Neo4J, когда мы говорим о решениях на основе JVM.
Что касается схемы Datomic, я думаю, что это просто правильный баланс между гибкостью и стабильностью.
чтобы завершить вышеприведенные ответы, я хотел бы подчеркнуть, что неизменность и способность помнить прошлое не являются "волшебными функциями", подходящими для нескольких особых случаев, таких как аудит. Это подход, который имеет несколько глубоких преимуществ по сравнению с базами данных "изменчивых ячеек" (которые сегодня составляют 99% баз данных). Стюарт Хэлоуэй прекрасно демонстрирует это в этом видео:несоответствие импеданса-это наша вина.
по моему личному мнению, такой подход принципиально более здравомыслящий концептуально. Используя его в течение нескольких месяцев, я не вижу, что Datomic имеет сумасшедшие магические сложные силы, а более естественную парадигму без некоторых из больших проблем, которые есть у других.
вот некоторые особенности Datomic, которые я нахожу ценными, большинство из которых включены неизменяемостью:
- поскольку чтение не является удаленным, вам не нужно создавать свои запросы, как экспедиция по проводам. В частности, вы можете разделить проблемы на несколько запросов (например, найдите сущности, которые являются входными данными для моего запроса-ответьте на некоторые бизнес-вопросы об этих сущностях-извлеките связанные данные для представления результата)
- схемы очень гибкий, без потери мощности, запрос
- удобно, чтобы ваши запросы были интегрированы в ваш язык прикладного программирования
- Entity API приносит вам хорошие части ORMs
- язык запросов программируется и есть примитивы для абстракции и повторного использования (правила, предикаты, функции базы данных)
- производительность: писатели мешают только другим писателям, и никто не мешает читателям. Кроме того, много кэширования.
- ... и да, несколько сверхдержав, таких как путешествие в прошлое, спекулятивные записи или ветвящаяся реальность.
в отношении не чтобы использовать Datomic, вот текущие ограничения и ограничения, которые я вижу:
- вы должны быть на JVM (есть также REST API, но вы теряете большую часть преимуществ IMO)
- не подходит для записи масштаба, ни огромные объемы данных
- не будет специально интегрирован в фреймворки, например, в настоящее время вы не найдете библиотеку, которая генерирует конечные точки CRUD REST из схемы Datomic
- это коммерческая база данных
- поскольку чтение происходит в процессе подачи заявки ("одноранговый"), вы должны убедиться, что у однорангового узла достаточно памяти для хранения всех данные, которые он должен пройти в запросе.
Так что мой очень расплывчатый и неформальный ответ будет таков Datomic хорошо подходит для большинства нетривиальных приложений, которые пишут нагрузку разумно, и у вас нет проблем с лицензией и быть на JVM.
по аналогии, вы можете задать себе тот же вопрос для Git по сравнению с другими системами управления версиями, которые не основаны на неизменности.
просто предварительно добавить над другими ответами:
вероятно, справедливо сказать, что datomic представляет собой лучшую концептуальную основу для запрашиваемого хранилища данных всех других текущих опций, будучи частично масштабируемым и не исключительно производительным.
Я говорю только частично масштабируемый, потому что запросы должны вписываться в одноранговую оперативную память или терпеть неудачу. И не исключительно производительность, как первоклассный SQL запросы можно оптимизировать запросы чтобы вписаться в память через сложные планы выполнения, что-то, что я еще не видел, упоминается как функция в datomic; развязка Datomic транзакций и запросов может в целом компенсировать эту функцию.
В отличие от многих движков NoSQL, транзакции являются первоклассным гражданином, что ставит его наравне с системами СУБД в этом ключевом отношении.
для приложений, где данные читаются больше, чем записываются, необходимы транзакции, запросы всегда помещаются в память или память очень дешевая, и общий размер накопленных данных не слишком большие, это может быть выигрыш, когда коммерческий продукт может быть предоставлен-для тех, кто готов принять его новую концептуальную структуру, подразумеваемую в API.