Когда я должен использовать Datomic?


я заинтригован в службе базы данных Datomic, но я не уверен, что он соответствует потребностям проектов, над которыми я работаю. Когда Datomic является хорошим выбором, и когда его следует избегать?

4 55

4 ответа:

с условием, что я не использовал Datomic в производстве, думал, что дам вам ответ.

преимущества

  1. запросы Datalog являются мощными (более того, чем нерекурсивный SQL) и очень выразительными.
  2. запросы могут быть написаны с помощью структур данных Clojure, и это не слабый DSL, как многие библиотеки SQL, которые позволяют выполнять запросы со структурами данных.
  3. он неизменен, поэтому вы получаете преимущества, которые дает вам неизменность Clojure/другие языки, а также a. это также позволяет хранить, сохраняя структуры, все прошлые факты в вашей базе данных-это очень полезно для аудита и многое другое

недостатки

  1. Это может быть медленно, так как Datalog просто будет медленнее, чем эквивалентный SQL (предполагая, что эквивалентный оператор SQL может быть написан).
  2. если вы много пишете, вам, возможно, придется беспокоиться о том, что один транзактор будет перегружен. Это кажется маловероятным в большинстве случаев, но это то, о чем нужно думать (вы могли бы сделать своего рода осколок, хотя и, вероятно, сохранить себя; но это не БД, например, для хранения данных биржевого тика).
  3. немного сложно встать и работать с ним, и это дорого, а лицензирование и цена затрудняют использование размещенного экземпляра с ним: вам нужно будет иметь дело с sysadminning это самостоятельно, а не использовать что-то вроде Postgres на Heroku или Mongo в MongoHQ

Я уверен, что Мне не хватает некоторых с каждой стороны, и хотя у меня есть 3 перечисленных в разделе недостатки, я думаю, что преимущества перевешивают их в более сложных обстоятельствах, когда недостатки не исключают его использования. Цена, вероятно, тот, который будет препятствовать его использованию в большинстве небольших проектов (что вы ожидаете пережить 1 год бесплатной пробной версии).

Cf. это короткий пост описание Datomic просто для получения дополнительной информации.

выразительность (c. f. Datalog) и неизменность являются потрясающий. Это так весело работать с Dataomic в этом отношении, и вы можете сказать, что это мощный, просто используя его немного.

одна важная вещь при рассмотрении того, подходит ли Datomic для вашего приложения, - это думать о форме данных, которые вы собираетесь хранить и запрашивать - поскольку факты Datomic на самом деле очень похожи на троек RDF (+ понятие времени первого класса), он очень хорошо подходит для моделирования сложных отношений (связанных графических данных) - то, что часто громоздко с традиционными базами данных SQL. Я нашел этот аспект одним из самых привлекательных и важных для меня, он действительно работал ну, даже если это, конечно, не что-то эксклюзивное для Datomic, так как есть много других высококачественных предложений для графовых баз данных, нужно упомянуть Neo4J, когда мы говорим о решениях на основе JVM.
Что касается схемы Datomic, я думаю, что это просто правильный баланс между гибкостью и стабильностью.

чтобы завершить вышеприведенные ответы, я хотел бы подчеркнуть, что неизменность и способность помнить прошлое не являются "волшебными функциями", подходящими для нескольких особых случаев, таких как аудит. Это подход, который имеет несколько глубоких преимуществ по сравнению с базами данных "изменчивых ячеек" (которые сегодня составляют 99% баз данных). Стюарт Хэлоуэй прекрасно демонстрирует это в этом видео:несоответствие импеданса-это наша вина.

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

вот некоторые особенности Datomic, которые я нахожу ценными, большинство из которых включены неизменяемостью:

  1. поскольку чтение не является удаленным, вам не нужно создавать свои запросы, как экспедиция по проводам. В частности, вы можете разделить проблемы на несколько запросов (например, найдите сущности, которые являются входными данными для моего запроса-ответьте на некоторые бизнес-вопросы об этих сущностях-извлеките связанные данные для представления результата)
  2. схемы очень гибкий, без потери мощности, запрос
  3. удобно, чтобы ваши запросы были интегрированы в ваш язык прикладного программирования
  4. Entity API приносит вам хорошие части ORMs
  5. язык запросов программируется и есть примитивы для абстракции и повторного использования (правила, предикаты, функции базы данных)
  6. производительность: писатели мешают только другим писателям, и никто не мешает читателям. Кроме того, много кэширования.
  7. ... и да, несколько сверхдержав, таких как путешествие в прошлое, спекулятивные записи или ветвящаяся реальность.

в отношении не чтобы использовать Datomic, вот текущие ограничения и ограничения, которые я вижу:

  1. вы должны быть на JVM (есть также REST API, но вы теряете большую часть преимуществ IMO)
  2. не подходит для записи масштаба, ни огромные объемы данных
  3. не будет специально интегрирован в фреймворки, например, в настоящее время вы не найдете библиотеку, которая генерирует конечные точки CRUD REST из схемы Datomic
  4. это коммерческая база данных
  5. поскольку чтение происходит в процессе подачи заявки ("одноранговый"), вы должны убедиться, что у однорангового узла достаточно памяти для хранения всех данные, которые он должен пройти в запросе.

Так что мой очень расплывчатый и неформальный ответ будет таков Datomic хорошо подходит для большинства нетривиальных приложений, которые пишут нагрузку разумно, и у вас нет проблем с лицензией и быть на JVM.

по аналогии, вы можете задать себе тот же вопрос для Git по сравнению с другими системами управления версиями, которые не основаны на неизменности.

просто предварительно добавить над другими ответами:

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

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

В отличие от многих движков NoSQL, транзакции являются первоклассным гражданином, что ставит его наравне с системами СУБД в этом ключевом отношении.

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