ArangoDB FOXX节点扩展

我试图将一个应用程序从sails移到FOXX。 我期待着我可以在FOXX中使用node.js模块,但是我遇到了一个问题。 我需要在服务器上创build一个“工作”目录,以对SCM存储库执行操作。 我安装了“删除”和“mkdirp”模块。 mkdirp模块调用在FOXX下报告缺less的fs.lstatSync。 安装fs的本地节点副本不能解决问题。

如果这是一个问题,那么我的一些其他任务,如产卵外部命令行程序可能是不可能的。 在这种情况下,我可能需要重新考虑将所有任务移至FOXX,但这意味着需要在帆和FOXX中复制大量的function,这可能是部署的噩梦。

虽然Foxx非常灵活,但它只是在ArangoDB的JavaScript环境中运行。 这个环境并不完全与Node(以及NPM上的某些模块)兼容,特别是当涉及到asynchronous代码或文件系统和networkingI / O时。

具体而言, fs模块不同于Node的内置fs模块。

幸运的是, removemkdirp模块提供的两个function已经内置在ArangoDB的fs模块中:

  • fs.makeDirectoryRecursive相当于mkdirp
  • fs.removeDirectoryRecursive相当于remove

从ArangoDB内部产生外部进程是可能的,但相关的function是内部API的一部分,并不打算在Foxx服务中使用(除了其他限制,目前没有办法获得输出,只是退出状态)。

根据你想要达到什么样的性能要求,将I / O繁重的代码分离成一个外部节点微服务可能是一个更好的主意。 Foxx最适合作为底层数据库的应用程序逻辑包装器,所有的Foxx代码都可以有效地与其他的ArangoDB JavaScript代码一起运行,所以长时间运行的请求可能会影响到ArangoDB处理需要接触JavaScript层的其他请求的能力。

在您提到的情况下(您提到与SCM软件交互),我build议创build一个小型独立Node服务来处理SCM相关的逻辑,并根据需要(或者直接在两个服务之间)从sails进行通信。 虽然这意味着一些额外的开销,但也会比ArangoDB中的非数据库相关任务的CPU周期更具可扩展性。