Javascript ArangoDB的哪些部分是通过节点GYP完成的

Javascript ArangoDB的哪些部分是通过节点GYP完成的,javascript,node.js,arangodb,node-gyp,Javascript,Node.js,Arangodb,Node Gyp,我正在弄清楚ArangoDB的结构,以确定它是否是我的长期解决方案 我的一个重要问题是,节点gyp(或节点插件)由哪些部分组成?查询生成器如何将JavaScript生成的AQL查询转换为本地查询 我知道我自己也可以更深入地研究代码,但我认为如果一些核心开发人员能够回答这个问题(或者解释他们如何向JavaScript和AQL公开功能),速度会快得多 我认为对许多负责分析ArangoDB的人来说,这很有趣。(我们的工作不是相信营销短语和基准……我们必须了解它是如何运作的) 我的主要目标是将Arang

我正在弄清楚ArangoDB的结构,以确定它是否是我的长期解决方案

我的一个重要问题是,节点gyp(或节点插件)由哪些部分组成?查询生成器如何将JavaScript生成的AQL查询转换为本地查询

我知道我自己也可以更深入地研究代码,但我认为如果一些核心开发人员能够回答这个问题(或者解释他们如何向JavaScript和AQL公开功能),速度会快得多

我认为对许多负责分析ArangoDB的人来说,这很有趣。(我们的工作不是相信营销短语和基准……我们必须了解它是如何运作的)


我的主要目标是将ArangoDB视为JavaScript开发人员。

ArangoDB不是由node或gyp组成的。但是ArangoDB使用Google的V8 JavaScript引擎来执行JavaScript代码,与node.js一样

这意味着您可以在ArangoDB中运行用户定义的JavaScript代码,它将由V8动态编译为本机代码。ArangoDB自己的一些模块也是用JavaScript编写的。一些第三方JavaScript模块,包括node.js和npm使用或编写的一些模块,也与ArangoDB捆绑在一起

关于与node.js和npm模块的兼容性:

node.js和npm中的模块也可以在ArangoDB中工作,只要它们不依赖node.js内部或其他模块的代码。这意味着所有仅为JavaScript且不需要任何特定于节点的东西的模块都应该在ArangoDB中工作
joi
就是一个很好的例子。依赖于No.js特定对象或JNE.No.js的C++扩展的No.js/NPM模块在ArangoDB中不起作用。

ARANGODB本身是用C++编写的,有些模块是用JavaScript编写的。ArangoDB的内部可以通过V8包装器对象和函数访问用户定义的JavaScript代码和捆绑的ArangoDB JavaScript模块。这些函数是通过告诉V8它们存在的方式暴露给JavaScript的C++函数。p> 下面是一个示例:ArangoDB公开了一个名为

db
的JavaScript对象。此对象具有一些预定义的函数,例如
\u collection()
。当调用这个函数时,这将是对C++函数的一种调用,它可以处理它的(JavaScript)参数,在这种情况下,它应该是一个集合名称字符串。在C++函数内部,将查找指定名称集合。如果未找到,函数将返回JavaScript
null
对象。如果找到,函数将返回一个集合对象,该对象被包装在所谓的V8外部对象中。对于JavaScript代码,这看起来像是一个普通对象,但是这个对象又有一些C++绑定。 为了使所有这些工作正常,服务器将在开始时在V8上下文中注册
db
对象,并为所有对象的方法注册包装函数。它将对其他对象和函数执行此操作,因此服务器内部有一个完整的JavaScript API

,ArangoDB的查询语言,用C++编写,并将被执行。但是,一些AQL函数和运算符是用JavaScript实现的。如果AQL查询使用这样的函数或运算符,则将生成特定于查询的JavaScript片段,使用V8动态编译并执行。 此外,AQL查询可以使用用户定义的JavaScript函数进行计算。这些函数是常规JavaScript函数,在查询中使用之前,必须使用命令注册这些函数。这些函数的调用如上所述,生成并执行一段动态JavaScript代码来调用用户定义的函数


最后,它是用JavaScript编写的,允许在ArangoDB服务器中定义HTTP路由。这些路由背后的操作是用户定义的,可以通过前面提到的方式访问服务器内部和数据库数据。

ArangoDB不是由node或gyp组成的。但是ArangoDB使用Google的V8 JavaScript引擎来执行JavaScript代码,与node.js一样

这意味着您可以在ArangoDB中运行用户定义的JavaScript代码,它将由V8动态编译为本机代码。ArangoDB自己的一些模块也是用JavaScript编写的。一些第三方JavaScript模块,包括node.js和npm使用或编写的一些模块,也与ArangoDB捆绑在一起

关于与node.js和npm模块的兼容性:

node.js和npm中的模块也可以在ArangoDB中工作,只要它们不依赖node.js内部或其他模块的代码。这意味着所有仅为JavaScript且不需要任何特定于节点的东西的模块都应该在ArangoDB中工作
joi
就是一个很好的例子。依赖于No.js特定对象或JNE.No.js的C++扩展的No.js/NPM模块在ArangoDB中不起作用。

ARANGODB本身是用C++编写的,有些模块是用JavaScript编写的。ArangoDB的内部可以通过V8包装器对象和函数访问用户定义的JavaScript代码和捆绑的ArangoDB JavaScript模块。这些函数是通过告诉V8它们存在的方式暴露给JavaScript的C++函数。p> 下面是一个示例:ArangoDB公开了一个名为

db
的JavaScript对象。此对象具有一些预定义的函数,例如
\u collection()
。当调用这个函数时,这将是对C++函数的一种调用,它可以处理它的(JavaScript)参数,在这种情况下,它应该是一个集合名称字符串。在C++函数内部,将查找指定名称集合。如果未找到,函数将返回JavaScript
null
对象。如果找到,函数将返回一个集合对象,该对象被包装在所谓的V8外部对象中。对于JavaScript代码,这看起来像一个常规对象