6

我熟悉在 Clojure 中开发桌面应用程序(编写了一个多线程交互式可视化系统)。但是,我对使用 Clojure 进行 Web 开发还很陌生。

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

该应用程序非常简单;一个基本的论坛。在给定时间,并发用户总数将小于 100。对我来说重要的一件事是轻松备份/数据一致性的能力——对我来说非常重要的是我可以轻松地进行日常备份(并且不会丢失所有数据。)

谢谢!

4

3 回答 3

5

您可以使用许多数据库;如果数据库有用于 Java 的 API,那么你应该很高兴。MySQLMongoDBPostgresHadoop ……等等。

如需对 Clojure 中的 webstack 有一个很好的概述,请查看 brehaut关于此事的文章

要快速启动和运行 Clojure 和 ClojureScript,请尝试ClojureScriptOne

有很多方法可以写出你想写的东西;如果您已经熟悉 Clojure,那么上手应该不会太难。

于 2012-04-14T05:17:35.610 回答
5

我自己没有使用过它,但 Datomic ( http://datomic.com/ ) 对于来自 Clojure 的任何人来说看起来都很棒。

于 2012-05-22T03:48:49.367 回答
1

Datomic 是一个了不起的数据库,我强烈推荐它。它具有许多与其他数据库系统不同的特性:

  • 和 Clojure 的数据结构一样,它是持久化的,这意味着默认情况下,向数据库添加新事实不会删除旧事实,允许您查询数据库在之前时间点的状态,增强审计能力和辅助调试.
  • 底层实体属性值(EAV/三元组)数据模型(至少部分受到 RDF 和语义网的启发)非常灵活,允许您表达任意图形结构并轻松处理多态性。
  • 查询语言是 Datalog 的风格,是一种基于模式匹配的查询语言,比 SQL 等更具表现力,因为它可以进行递归查询,使其特别适合处理图形数据/查询。
  • 除了 Datalog 查询之外,还有一个pullapi,它让您可以更简单地使用类似 GraphQL 的表达式从数据库中提取数据,该表达式指定您希望从数据库中提取的类文档结构的形状。这些查询甚至可以在:findDatalog 查询的子句中使用。
  • 您可以在查询中使用 Clojure 函数。
  • 索引系统非常智能并且或多或少是自动的,这与通常用于调整 SQL 数据库以提高性能的工作形成鲜明对比。
  • 事务通过与查询不同的 API/函数调用,这意味着 OWASP(SQL 注入)确定的第一大安全风险在 Datomic 中实际上是不可能的。
  • Transactor/read-replica 设计使得扩展读取/查询变得超级容易,同时保持对 transactor 的压力。
  • 这很有趣。

这里值得指出的一件事是,通过采用 EAV 数据模型和数据记录/拉取查询,Datomic 最终具有更接近 NoSQL 数据库的结构灵活性,同时仍然从根本上是关系的,并且在它的关系查询中更具表现力比 SQL。

这太棒了,你绝对应该试一试。它会让你的大脑融化一点。以好的方式。

还值得注意的是,它的受欢迎程度激发了许多成功的开源项目,因此底层方法不会很快出现在任何地方:

  • DataScript:在内存中 clj/cljs 部分实现
  • Datahike:DataScript 的分支,它在磁盘索引上进行查询,这意味着您不必将所有内容都保存在内存中进行查询
  • Mentat:Mozilla 项目试图为 Mozilla 项目制作 Datomic-alike
于 2019-01-28T20:39:26.207 回答