在Arango Foxx中构建应用程序相比普通的Node应用程序有哪些优势?

11

我正在学习ArangoDB及其Foxx框架。但是对于使用该框架与构建自己的独立nodejs应用程序来进行API访问控制、逻辑等方面,我并不清楚使用该框架有什么好处。

Foxx框架相比普通的nodejs应用程序有哪些优势呢?


2
对于标记此帖为基于个人观点的版主们,我要说这不是基于个人观点的。我不是在问“哪个更好”,而是在问“有什么区别”。 - Yehosef
问题应该是,将什么样的逻辑放入nodejs应用程序中,将什么样的逻辑放入FOXX服务中。更多详细回复即将到来。 - dothebart
1
不,我的问题是是否有使用Foxx应用程序而不是独立的Node.js应用程序的好处。你的问题似乎假定使用Foxx应用程序有一些优势,而且你显然应该有一个 - 只是你可能想要将什么逻辑放在外面。我对这种假设提出了质疑 - 编写Foxx应用程序给我带来了什么好处? - Yehosef
我同意@Yehosef的观点。这个问题本身已经足够有效了。无论他选择如何表达自己的问题,都是他/她自己的事情,并且非常符合StackOverflow的宗旨。 - Glstunna
1个回答

12

全面披露:我是ArangoDB核心维护者和Foxx团队的成员。

我建议您观看我去年所做的网络研讨会,详细了解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,以更好地表示您应用程序的问题域而不是数据库的原始 HTTP API。

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


感谢您详细的回复。我正在尝试一个示例应用程序,当我开始时就有这个问题。到目前为止,我看到的主要优势是它减少了从应用程序到服务器的往返或者如果我想将捆绑的应用程序与数据库一起包含在原型工作中。当我考虑基于对象创建实现缓存、度量或作业排队时,我开始感觉到困难。我不认为我希望将其放在我的数据库中,通常我会在数据库外部处理该层。... - Yehosef
有时候我需要在外部获取一些东西 - 我不太清楚为什么所有的逻辑都不能放在那里...但是我听到了你的观点并且能够看到它的价值。我会尝试一下,看看效果如何。顺便说一句 - 感谢你的工作 - 这是一个非常令人印象深刻的数据库。 - Yehosef
@Yehosef Foxx在这两种情况下都能为您提供支持。您可以自行决定将多少逻辑移入Foxx服务中。您可以将Foxx仅用作存储过程的等效物,也可以在Foxx中构建整个应用程序。至于作业队列等等,这基本上取决于您的性能需求。我认为专用(外部)作业队列等等是一种优化——在某些情况下,这些优化可能不值得进行开发/维护工作量。 - Alan Plum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接