我对数据库服务Datomic感兴趣,但我不确定它是否符合我工作的项目的需求.Datomic什么时候是一个不错的选择,什么时候应该避免?
我一直在研究Datomic,它看起来很有趣.虽然似乎有关于Datomic如何在技术上工作的非常好的信息,但我还没有看到如何考虑数据建模.
Datomic中的数据建模有哪些最佳实践?这个问题有什么好的资源吗?
我非常受Rich Hickey倡导的数据管理方法的启发,并在Datomic中实现,数据从未就地变异,所有版本始终保存和查询,时间是第一个 -阶级观念.
当然,有专门的数据库匹配该描述,如Git,或任何其他源控制系统.问题是,是否有任何(或多或少)通用DBMS-es的关系,图形,层次,文档或任何其他风格可以有效地用于,例如,电子商务Web应用程序.或者Datomic是唯一的选择呢?
我该如何选择Datomic的后端存储服务?
选择DynamoDB而不是Postgres是优先考虑的问题,还是每个选项都有不同的权衡?如果是这样,他们是什么?
我正在考虑将Neo4j集成到我正在构建的Clojure系统中.我被问到的第一个问题是为什么我没有使用Datomic.有没有人对此有一个好的答案?我听说过有关Datomic的视频,但我对图形数据库知之甚少,不知道Neo4j和Datomic之间的区别,它对我有什么不同?
Datomic Queries and Rules文档的"嵌入"部分说:
像SQL这样的查询语言是围绕客户端 - 服务器模型定义的,在单个对话中,您将需要同时执行以下操作:
- 回答你的基本问题,例如本月买袜子的人.
- 恢复报告和处理所需的任何其他信息,例如,他们的姓名和电子邮件地址.
后者实际上不是一个查询,它只是对相关信息的机械导航.
虽然我很欣赏这两个不同方面的正交性如何得到尊重,但我认为我经常需要检索整个实体,无论其属性如何.
据我所知,查询通常具有以下形式:
(datomic.api/q '[:find ?name ?age ?email
:where
[?e :myapp/name ?name]
[?e :myapp/age ?age]
[?e :myapp/email ?email]]
(db conn))
Run Code Online (Sandbox Code Playgroud)
如果我想检索具有N个属性的实体,我会让它们在每个查询中列出它们,这对我来说似乎很乏味且容易出错.
如何告诉Datomic检索具有它们所持有的所有字段的实体,而不必明确指定它们?
使用Datomic,我对如何使用本地数据库感到困惑
如果我输入:
>>(ns datomic-tut (:use [datomic.api :as d]))
nil
>>(d/create-database "datomic:mem://hello")
true
>> (d/connect "datomic:mem://hello")
#<LocalConnection datomic.peer.LocalConnection@57102fab>
>> Ctrl-D to Disconnect
Run Code Online (Sandbox Code Playgroud)
然后,如果我重新启动repl:
>> (ns project-ns (:use [datomic.api :as d]))
nil
>> (d/connect "datomic:mem://hello")
ExceptionInfo :peer/db-not-found Could not find hello in catalog clojure.core/ex-info (core.clj:4227)
Run Code Online (Sandbox Code Playgroud)
我可以创建另一种类型的本地uri来保存我创建的数据库吗?
在基于解放者的clojure项目中,我们使用datomic作为DB.在将我们的本地dev数据库迁移到S3托管的数据库并在我们的project.clj上添加所需的依赖项后,我们无法启动REPL但是Liberator堆栈运行正常lein run
我的猜测是数据库连接搞砸了,所以问题是,我怎么能以某种方式"调试"或弄清楚这种lein repl超时的原因是什么?
我的project.clj
(defproject myproject "0.1.0-SNAPSHOT"
:main myproject.core
:jvm-opts ["-Xmx1G"]
:datomic {:schemas ["resources" ["myproject-schema.edn" ]]}
:plugins [[lein-ring "0.8.10"]]
; cp bin/transactor config/samples/free-transactor-template.properties resources/transactor.properties
:profiles {:dev
{:datomic {
; :config resources/transactor.properties
; :db-uri "datomic:free://127.0.0.1:4334/myproject"}
:db-uri "datomic:ddb://us-east-1/datomica/myproject"}
:dependencies [[ring-mock "0.1.5"]
[midje "1.5.1"]
]
}
}
:dependencies [[org.clojure/clojure "1.5.1"]
[com.datomic/datomic-pro "0.9.4556"]
; [com.datomic/datomic-free "0.9.4470"]
[com.cemerick/friend "0.2.0"]
[liberator "0.10.0"]
[compojure "1.1.5"]
[http-kit "2.1.13"]
[cheshire "5.1.1"]
[ring/ring-jetty-adapter "1.1.0"]
[ring/ring-devel "1.2.0"]
[org.clojure/clojure-contrib "1.2.0"]
[url62 "1.0.0-SNAPSHOT"]
[clj-http "0.7.8"]
[org.clojars.nathell/clojure-contrib "1.2.0"]
[com.taoensso/timbre "3.0.0-RC4"] …Run Code Online (Sandbox Code Playgroud) 我找到了这行Clojure代码:@(d/transact conn schema-tx).它是一个创建数据库模式的Datomic语句.由于难以搜索"@"等字符,我在Google上找不到任何相关内容.
'at'符号在第一个括号之前是什么意思?
我意外地向datomic提交了一个事务,我想"撤消"整个事务.我确切知道它是什么交易,我可以看到它的数据,但我不知道如何从那里得到回滚交易.
datomic ×10
clojure ×8
database ×2
immutability ×1
leiningen ×1
neo4j ×1
postgresql ×1
survey ×1