couchdb - 如何从 couchdb 运行服务器端代码?

标签 couchdb soa

Couchdb 非常擅长存储和提供数据,但我在掌握如何使用它进行后端处理方面遇到了一些困难。例如,GWT 对同步和异步回调提供开箱即用的支持,允许您在服务器上运行任意 Java 代码。有没有办法用 couchdb 做这样的事情?

例如,当用户单击网络应用程序的按钮时,我想生成并提供 PDF 文件。理想情况下,工作流程应如下所示:

  • 用户输入一些数据
  • 用户点击生成按钮
  • 调用服务器,并在服务器端生成 PDF。服务器代码可以用任何语言编写,但最好是 Java。
  • PDF 生成完成后,系统会提示用户下载并保存文档。

有没有办法使用开箱即用的 couchdb 来实现此目的,或者是否需要一些额外的第三方软件来在 Web 客户端和后端数据处理代码之间进行通信?

编辑:看起来我在解释我的问题时做得很差。我感兴趣的本质上是从 Couchdb 提供 servlet,类似于从 war 文件提供 Java servlet 和网页。我使用 GWT 作为示例,因为它支持一起开发 servlet 和客户端代码并将所有内容编译到单个 war 文件中。我对这样的事情非常感兴趣,因为它可以通过 Couchdb 复制轻松部署功能齐全的网站。

但是,从表面上看,我的问题的答案是否定的,您无法从 couchdb 提供 servlet。数据库是为 CRUD 样式交互设置的,任何 servlet 样式组件都需要单独提供服务,或者通过轮询数据库以了解更改并采取相应操作来完成。

最佳答案

以下是我建议的一般工作流程:

  1. 当用户单击“生成”时:序列化他们输入的数据和任何其他相关元数据(例如优先级、用户名)并将其作为新文档发布到 couchdb。跟踪文档的 _id。
  2. 编写一个后台进程来监视 couchdb 是否有需要处理的文档。
  3. 当它看到这样的文档时,让它生成 PDF 并将其附加到同一个沙发文档中。
  4. 现在回到客户端。您可以使用 ajax 轮询来重复获取沙发文档并测试它是否有附件。如果是,那么您可以向用户显示下载链接。

当然,细节决定成败......

后台进程可以通过两种方式识别待处理文档:

  • 使用_changes API监视 _rev 以“1-”开头的新文档
  • 在 couchdb View 上发出请求,该 View 仅返回没有“_attachments”属性的文档。当没有要处理的文档时,它不会返回任何内容。
    • 可选:如果您有多个并行处理队列的 PDF 制作进程,您将需要使用 {"being-processed":true} 等属性更新 couch 文档并过滤这些进程也从视野中出来。

其他一些想法:

  • 我不建议在此用例中使用 couchdb 外部 API,因为它(基本上)意味着 couchdb 和您的 PDF 生成代码必须位于同一台计算机上。但这是需要注意的事情。
  • 我对 GWT 一无所知,但它似乎没有必要实现您的目标。当然,CouchDB 可以提供您想要的任何静态文件(js 或其他),作为数据库中文档的附件或来自文件系统。您甚至可以将 eval() JSON 属性放入 couch 文档中。因此,您可以使用 GWT 进行 ajax 调用或其他任何操作,但 GWT 可以与 couchdb 完全解耦。这样可能会更简单。

关于couchdb - 如何从 couchdb 运行服务器端代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3462893/

相关文章:

python - 无法使用 python 中的 Cloudant 扩展从 CouchDb 获取 View

couchdb - OLAP 中的 CouchDB 怎么样?

architecture - SOA - 微服务 : Use API REST or SOAP

api - API 和 SOA 有什么区别

javascript - 从 couchdb 数据库加载图像

python - 使用 CouchDB 进行 Flask 分页

mongodb - 最佳数据记录数据库

.net - Windows 上 MSMQ 的队列替代方案?

java - 以编程方式取消部署 war 文件 (Wildfly 18.x)

oop - 面向服务与面向对象——它们可以共存吗?