当前位置:  开发笔记 > 编程语言 > 正文

使用Clojure数据库

如何解决《使用Clojure数据库》经验,为你挑选了6个好方法。

有哪些方法可以使用Clojure中的数据库?

我从Clojure知道你可以用Java做任何事情,但这意味着我最终可能会使用与Clojure简单相冲突的过于复杂的东西(比如Hibernate).有什么建议或意见吗?



1> Brian Carper..:

clojure-contrib有一个sql库,它是JDBC(java.sql.DriverManager)的瘦包装器.随附的测试文件包含一些使用示例.


实际上,自从我发布以来它已经移动了两次.它现在在这里:http://github.com/richhickey/clojure-contrib :)
并再次感动(更好:弃用).直接从https://github.com/clojure获取您的库

2> mikera..:

我现在(截至2011年底)推荐Korma - "Clojure的美味SQL"

这是一个漂亮的小SQL DSL,这是网站上的一个例子:

(select users
  (aggregate (count :*) :cnt)
  (where (or (> :visits 20)
             (< :last_login a-year-ago))))


Korma似乎被遗弃了:https://groups.google.com/d/msg/clojure/SgqL_zDvPdw/ZJtfvEucJQYJ

3> foxdonut..:

如果你愿意使用Java库但想要一些简单的东西,也许你会喜欢Persist.只需10分钟即可看看它是否符合您的需求.



4> John Cromart..:

我想添加一个2011年11月的答案,以便有人从谷歌来这里.

Clojure 1.3中的当前核心SQL访问库是clojure.java.jdbc.在ClojureQL和Korma之上构建了一些非常好的库.



5> claj..:

SQL数据库的最新和最好的似乎是HoneySQL和Yesql.

HoneySQL是一个非常优雅的DSL来生成SQL查询.有传闻它甚至可以修改高度优化的语句,请参阅2015年2月24日的clojure-group线程" 当前最佳的JDBC库? ".

Niels van Klaveren在上述帖子中说:

"基本上,它[HoneySQL]生成SQL脚本以重新链接外键引用以清理数据库中的重复项.它需要一个honeysql select查询,其中包含(至少)一个from表,一个group-by和一个order-by子句作为基本定义,需要考虑什么双重,以及应保留记录的顺序.结合JDBC元数据,查询有效地被重写以生成:

临时替换表

查询统一唯一索引,以防止更新外键引用时发生冲突

查询以更新所有外键引用

删除语句以删除所有重复项

为了创造最佳的表演,但仍独立于数据库的SQL,我必须有额外的条款一样延伸honeysql OVERPARTITION BY.我不会说这是微风,但似乎工作得很好.

...

这将SQL(有时)GB的脚本减少到几百行SQL,有一次运行时间为19小时到1.5分钟."

另一方面,Yesql旨在实现完全简单.它定义了一些加载参数化文件的.sql函数.

它的网页提到了以下"USP":

没有语法上的惊喜.您的数据库不符合SQL标准 - 它们都没有 - 但Yesql并不关心.你永远不会花时间寻找"等效的sexp语法".你永远不需要回归(raw-sql "some('funky'::SYNTAX)")功能.

更好的编辑支持.您的编辑器可能已经拥有出色的SQL支持.通过将SQL保持为SQL,您可以使用它.

团队互操作性.您的DBA可以读写您在Clojure项目中使用的SQL.

更容易进行性能调整.需要解析查询计划吗?当您的查询是普通SQL时,它会容易得多.

查询重用.将相同的SQL文件放到其他项目中,因为它们只是简单的SQL.将它们作为子模块共享.



6> Mark Probst..:

我在Clojure中使用Berkeley DB作为简单的键/值数据库.看到这里.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有