【问题标题】:ArangoDB FOXX node extensionsArangoDB FOXX 节点扩展
【发布时间】:2016-03-21 17:59:55
【问题描述】:

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

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

【问题讨论】:

    标签: node.js arangodb foxx


    【解决方案1】:

    虽然 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 相关的逻辑,并在必要时从帆与两者进行通信(甚至直接在两个服务之间)。虽然这意味着最初会增加一些开销,但它也将比在 ArangoDB 中将 CPU 周期花费在非数据库相关任务上更具可扩展性。

    【讨论】:

    • 这很有意义。谢谢。
    猜你喜欢
    • 2018-09-06
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多