使用Clojure/ClojureScript开发Web后端

6

我熟悉使用Clojure开发桌面应用程序(写过多线程交互式可视化系统)。然而,我在使用Clojure进行Web开发方面还比较新手。

我打算在服务器上使用Clojure处理逻辑,并使用ClojureScript处理客户端工作。但是,我不知道用什么来做我的数据库服务器。我应该使用像Monogodb这样的东西吗?还是Hadoop?或者...?

这个应用程序非常简单; 一个基本的论坛。同时在线的用户总数将小于100。对我来说重要的一件事是能够轻松备份/数据一致性--我非常希望可以轻松地进行每日备份(并且不会丢失所有数据)。

谢谢!


交互式可视化系统是否公开?我正在使用C2库处理Clojure/ClojureScript数据可视化,我很想看看其他在这个领域中使用Clojure的程序。 - Kevin L.
@Kevin:抱歉,这是完全私人的;尽管我们可能会发布一些GUI元素。 - user1311390
Datomic是由Clojure的创造者编写的,使用Clojure编写。也许你应该使用Light Table进行开发,它是使用ClojureScript编写的。 :) - nawfal
3个回答

6
你可以使用许多数据库;如果数据库有Java API,那么你就可以开始了。MySQLMongoDBPostgresHadoop……等等。
要了解Clojure中的Web堆栈,请查看brehaut的相关文章
要快速启动Clojure和ClojureScript,请尝试ClojureScriptOne
有许多编写所需内容的方法;如果您已经熟悉Clojure,那么开始应该不太难。

顺便问一句,你知道ClojureScriptOne正在使用什么后端吗? - user1311390
它使用Ring/Compojure/Enlive作为其服务器端堆栈。虽然您当然可以添加一个,但该应用程序中没有涉及到数据库。 - Isaac

5

虽然我自己没有使用过,但对于从Clojure转过来的人来说,Datomic( http://datomic.com/ )看起来非常棒。


1

Datomic是一款非常出色的数据库,我强烈推荐它。它有许多功能使其与其他数据库系统不同:

  • 与Clojure的数据结构一样,它是持久化的,这意味着默认情况下,向数据库添加新事实不会删除旧事实,使您能够查询先前时间点的数据库状态,增强审计和调试支持。
  • 底层实体属性值(EAV /三元组)数据模型(至少部分受RDF和语义Web的启发)非常灵活,允许您表达任意图形结构并轻松处理多态性。
  • 查询语言是Datalog的一种风格,一种基于模式匹配的查询语言,比SQL等严格更具表现力,因为它可以进行递归查询,特别适合处理图形数据/查询。
  • 除了Datalog查询外,还有一个pull api,它允许您使用类似GraphQL的表达式更简单地从数据库中提取数据,该表达式指定您想要从数据库中提取的类似文档的结构的形状。这些查询甚至可以在Datalog查询的:find子句中使用。
  • 您可以在查询中使用Clojure函数。
  • 索引系统非常智能且几乎自动化,与通常需要调整SQL数据库以获得性能的工作形成鲜明对比。
  • 事务通过不同的API /函数调用进行,这意味着OWASP确定的头号安全风险(SQL注入)在Datomic中实际上是不可能的。
  • 传输器/读取副本设计使得轻松扩展读取/查询,同时减轻传输器的压力。
  • 它非常有趣。
这里值得指出的一件事情是,通过采用EAV数据模型和datalog/pull查询,Datomic最终具有更接近NoSQL数据库的结构灵活性,同时仍然基于关系模型,并且在其关系查询方面比SQL更加表达力强大。
它非常惊人,你绝对应该试一试。它会让你的大脑有点崩溃,但是是好的方式。
另外值得注意的是,它的流行已经启发了许多成功的开源项目,因此这种基本方法不会很快消失:
- DataScript:内存clj/cljs部分实现 - Datahike:DataScript的分支,可在磁盘索引上进行查询,这意味着您不必将所有内容保存在内存中进行查询 - Mentat:Mozilla项目,试图为Mozilla项目创建类似Datomic的东西

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接