【问题标题】:Async access to MongoDB using Aleph/Lamina使用 Aleph/Lamina 异步访问 MongoDB
【发布时间】:2012-11-23 02:28:22
【问题描述】:

我已经阅读有关 Clojure 的文章有一段时间了,我正在考虑将它作为 Node.js 的替代品(我已将其用于另一个项目)。最有前途的库似乎是 Aleph/Lamina,不幸的是,它没有 Node.js 那么多的示例。我的问题是:

  1. 如何处理带有异步操作链的请求,例如从 MongoDB 读取文档、进行一些计算、保存新文档并在响应中发送它?我无法从 Lamina wiki 页面中的示例中编写它。这听起来像是一个很常见的用例,我很惊讶没有找到任何显示它的代码。如果您能给我一些示例代码,那就太好了。

  2. 此设置是否足以满足重负载服务器(例如,每秒数万个请求)?我无法为每个新请求创建一个线程,所以我需要类似于 Node 方法的东西。

  3. 是否有任何中型或大型公司使用此方法的示例?

  4. 是否有更好的 Clojure 替代 Node(除了 Aleph/Lamina)?也许 Clojurescript 以 Node 为目标?我的客户端不是用 Javascript 编写的,因此在客户端和服务器中使用相同的语言对我来说并不是一个优势。

谢谢!

【问题讨论】:

    标签: node.js mongodb clojure clojurescript lamina-clojure


    【解决方案1】:

    几个指针:

    1. 您需要查看 Aleph,它在 Lamina 通道抽象之上构建 HTTP 抽象。
    2. 在 MongoDB 中读取和写入文档可以是异步的,但库应该提供这一点。在 Node.js 中,MongoDB 库必须是异步的,否则会搞砸 Node 编程模型,而 Clojure 并非如此,因此很可能 Clojure MongoDB 库提供了非异步功能。
    3. 异步操作仅在 IO 的情况下有用,即读取/写入 mongodb、发回响应等。生成计算是 CPU 绑定操作,与异步模型无关。
    4. Vert.x 是 Java 世界的 Node.js。 Clojure 支持在路线图上。我更喜欢 Aleph,因为您可以根据需要在异步和非异步世界中玩游戏。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 2016-01-20
    相关资源
    最近更新 更多