首页 文章

ArangoDB FOXX节点扩展

提问于
浏览
2

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

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

1 回答

  • 2

    虽然Foxx非常灵活,但它“只是”在ArangoDB的JavaScript环境中运行 . 此环境与Node(以及NPM上的某些模块)不完全兼容,尤其是涉及异步代码或文件系统和网络I / O时 .

    具体来说, fs 模块与Node的内置 fs 模块不同 .

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

    • fs.makeDirectoryRecursive 相当于 mkdirp

    • fs.removeDirectoryRecursive 相当于 remove

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

    根据您希望实现的目标以及您的性能要求,将I / O密码分离到外部Node微服务中可能确实更好 . Foxx最适合作为底层数据库的应用程序逻辑包装器,所有Foxx代码都有效地与其他ArangoDB JavaScript代码一起运行,因此长时间运行的请求可能会影响ArangoDB处理需要触及JavaScript层的其他请求的能力 .

    在您的特定情况下(您提到与SCM软件交互)我建议创建一个小型独立节点服务来处理SCM相关逻辑,并在必要时(或者甚至直接在两个服务之间)与sails进行通信 . 虽然这意味着最初增加了一些开销,但它在ArangoDB中花费在非数据库相关任务上的CPU周期也会更具可扩展性 .

相关问题