【问题标题】:What does building an application in Arango Foxx offer beyond a regular node application除了常规节点应用程序之外,在 Arango Foxx 中构建应用程序还能提供什么
【发布时间】:2016-02-10 10:50:28
【问题描述】:

我正在了解有关 ArangoDB 及其 Foxx 框架的更多信息。但我不清楚通过使用该框架而不是为 API/访问控制、逻辑等构建自己的独立 nodejs 应用程序,我获得了什么。

Foxx 提供了哪些常规 nodejs 应用程序无法提供的功能?

【问题讨论】:

  • 版主将其标记为基于意见关闭 - 它不是。我不是在问“哪个更好”——我是在问“有什么区别”。
  • 问题应该是,将什么样的逻辑放入 nodejs 应用程序,以及放入 FOXX 服务。更多内容请尽快回复。
  • 否 - 我问的是拥有 foxx 应用程序而不是独立的 nodejs 应用程序是否有任何好处。你的问题版本似乎假设 Foxx 应用程序有一些优势,你显然应该有一个 - 你可能想把什么逻辑放在外面。我质疑这个假设 - 编写 Foxx 应用程序能给我带来什么好处?
  • 我同意@Yehosef。这是一个足够有效的问题。然而他选择表达他的问题是他/她的事,这非常符合 StackOverflow 的宗旨。

标签: arangodb foxx


【解决方案1】:

全面披露:我是 ArangoDB 核心维护者,也是 Foxx 团队的一员。

我建议您查看webinar I gave last year,详细了解 Foxx 和 Node 之间的差异以及在使用 ArangoDB 时使用 Foxx 的优势。我会在这里做一个简短的总结。

如果您将单一职责原则等理念应用于您的架构,您的服务器端代码有两个职责:

  1. 后端:使用后端数据存储(即 ArangoDB 或其他数据库)持久化和查询数据。

  2. 前端:将查询结果转换为客户端可接受的格式(例如 HTML、JSON、XML、CSV 等)。

在大多数传统应用程序中,这两个职责由在同一进程中运行的同一个单一应用程序代码库完成。

然而,与数据存储交互的任务通常需要编写大量特定于数据库技术的代码。您需要编写查询(例如使用 SQL、AQL、ReQL 或任何其他特定于技术的语言)或使用特定于数据库的驱动程序。

此外,在许多重要的应用程序中,您需要与存储过程之类的东西进行交互,这些东西也是“后端代码”的一部分,但存在于数据库中。因此,除了让应用程序服务器执行两项不同的任务(存储和渲染)之外,其中一项任务的一半代码最终都存在于其他地方,通常使用完全不同的语言。

Foxx 允许您将我们确定为服务器端代码“后端”的逻辑移动到 ArangoDB 中,从而解决这个问题。您不仅可以将查询语言、边缘和集合的所有细节隐藏在更特定于应用程序的 API 后面,还可以消除处理可能导致多次往返数据库的请求所需的网络开销。

对于琐碎的应用程序,这可能意味着您可以完全消除 Node 服务器并直接从客户端访问您的 Foxx API。对于更复杂的场景,您可能希望使用 Node 来构建 Foxx 服务可以接入的外部微服务(例如,与外部非 HTTP API 交互)。或者,您只需将传统的 Node 应用程序放在 ArangoDB 前面,然后使用 Foxx 创建一个 HTTP API,该 API 比数据库的原始 HTTP API 更能代表您的应用程序的问题域。

还值得牢记的是,Foxx 服务在结构上与 Node 应用程序并没有完全不同。您可以使用 NPM 依赖项并将代码拆分为模块,并且它们都可以存在于版本控制中并从 zip 包中进行部署。如果您不相信,我建议您尝试通过将一些最常见的查询实现为 Foxx 端点,然后决定是否要移动更多逻辑。

【讨论】:

  • 感谢您的详细回复。我正在尝试一个示例应用程序,我一开始就有这个问题。到目前为止,我看到的主要真正优势是它减少了从应用程序到服务器的往返行程,或者如果我想在数据库中包含一个捆绑的应用程序以进行原型工作。当我考虑基于对象创建实现缓存、度量或作业队列时,我开始感到皱纹。我认为我不希望在我的数据库中使用它,通常我会在数据库之外有一些东西来处理该层。 ...
  • 一旦我需要在外面有一些东西 - 我不太清楚为什么所有逻辑都不应该在那里。但我听到了你的观点并且可以看到价值。我会试一试,看看效果如何。顺便说一句 - 感谢您的工作 - 这是一个非常令人印象深刻的数据库。
  • @Yehosef Foxx 在这两种情况下都支持您。将多少逻辑转移到 Foxx 服务中取决于您。您可以将 Foxx 用作存储过程的等价物,也可以在 Foxx 中构建整个应用程序。至于作业队列等 - 它基本上归结为您的性能需求。我认为专用(外部)作业队列等是一种优化——在某些情况下,这些优化可能不值得开发/维护开销。
猜你喜欢
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多