ArangoDB FOXX 节点扩展
ArangoDB FOXX node extensions
我正在尝试将应用程序从 sails 转移到 FOXX。我原以为我可以在 FOXX 中使用 node.js 模块,但我 运行 遇到了问题。我需要在服务器上创建一个 "working" 目录来对 SCM 存储库执行操作。我安装了 "remove" 和 "mkdirp" 模块。 mkdirp 模块调用 fs.lstatSync,在 FOXX 下报告丢失。安装 fs 的本地节点副本无法解决问题。
如果这是一个问题,那么我的一些其他任务,例如生成外部命令行程序可能无法完成。在这种情况下,我可能需要重新考虑将所有任务移至 FOXX,但这意味着要在 sails 和 FOXX 中复制大量功能,这可能是一场部署噩梦。
虽然 Foxx 非常灵活,但它在 ArangoDB 的 JavaScript 环境中 "just" 运行。此环境与 Node(以及 NPM 上的某些模块)不完全兼容,尤其是在涉及异步代码或文件系统和网络时 I/O.
特别是 fs
模块不同于 Node 的内置 fs
模块。
幸运的是,remove
和 mkdirp
模块提供的两个功能已经内置在 ArangoDB 的 fs
模块中:
fs.makeDirectoryRecursive
等同于 mkdirp
fs.removeDirectoryRecursive
等同于 remove
可以从 ArangoDB 内部生成外部进程,但相关功能是内部 API 的一部分,并不打算用于 Foxx 服务(除其他限制外,目前无法获得输出,只是退出状态)。
根据您想要实现的目标和您的性能要求,将 I/O 繁重的代码分离到外部节点微服务中可能确实是一个更好的主意。 Foxx 最适合作为底层数据库的应用程序逻辑包装器,所有 Foxx 代码都有效地与其他 ArangoDB JavaScript 代码一起运行,因此长 运行 请求会影响 ArangoDB 处理其他需要的请求的能力触摸 JavaScript 层。
在您的特定情况下(您提到与 SCM 软件交互)我建议创建一个小型独立节点服务来处理与 SCM 相关的逻辑,并在必要时从 sails 与两者进行通信(甚至直接在两个服务之间) .虽然这意味着最初会增加一些开销,但它也比在 ArangoDB 中花费 CPU 个周期处理非数据库相关任务更具可扩展性。
我正在尝试将应用程序从 sails 转移到 FOXX。我原以为我可以在 FOXX 中使用 node.js 模块,但我 运行 遇到了问题。我需要在服务器上创建一个 "working" 目录来对 SCM 存储库执行操作。我安装了 "remove" 和 "mkdirp" 模块。 mkdirp 模块调用 fs.lstatSync,在 FOXX 下报告丢失。安装 fs 的本地节点副本无法解决问题。
如果这是一个问题,那么我的一些其他任务,例如生成外部命令行程序可能无法完成。在这种情况下,我可能需要重新考虑将所有任务移至 FOXX,但这意味着要在 sails 和 FOXX 中复制大量功能,这可能是一场部署噩梦。
虽然 Foxx 非常灵活,但它在 ArangoDB 的 JavaScript 环境中 "just" 运行。此环境与 Node(以及 NPM 上的某些模块)不完全兼容,尤其是在涉及异步代码或文件系统和网络时 I/O.
特别是 fs
模块不同于 Node 的内置 fs
模块。
幸运的是,remove
和 mkdirp
模块提供的两个功能已经内置在 ArangoDB 的 fs
模块中:
fs.makeDirectoryRecursive
等同于mkdirp
fs.removeDirectoryRecursive
等同于remove
可以从 ArangoDB 内部生成外部进程,但相关功能是内部 API 的一部分,并不打算用于 Foxx 服务(除其他限制外,目前无法获得输出,只是退出状态)。
根据您想要实现的目标和您的性能要求,将 I/O 繁重的代码分离到外部节点微服务中可能确实是一个更好的主意。 Foxx 最适合作为底层数据库的应用程序逻辑包装器,所有 Foxx 代码都有效地与其他 ArangoDB JavaScript 代码一起运行,因此长 运行 请求会影响 ArangoDB 处理其他需要的请求的能力触摸 JavaScript 层。
在您的特定情况下(您提到与 SCM 软件交互)我建议创建一个小型独立节点服务来处理与 SCM 相关的逻辑,并在必要时从 sails 与两者进行通信(甚至直接在两个服务之间) .虽然这意味着最初会增加一些开销,但它也比在 ArangoDB 中花费 CPU 个周期处理非数据库相关任务更具可扩展性。