- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在弄清楚 ArangoDB 的结构,以确定它是否可以成为我的长期解决方案。
我的一个重要问题是,哪些部分是由 node-gyp(或 Node-Addon)制作的 - 查询构建器如何将 JavaScript 生成的 AQL 查询转换为与原生查询一样快?
我知道我自己也可以更深入地研究代码,但我认为如果一些核心开发人员能够回答这个问题(或解释他们如何向 JavaScript 和 AQL 公开功能)会更快。
我觉得很多人负责分析ArangoDB很有意思。 (我们的工作不是相信营销用语和基准……我们必须了解它是如何运作的)。
我的主要目标是以 JavaScript 开发人员的身份看待 ArangoDB。
最佳答案
ArangoDB 不是由 node 或 gyp 组成的。但是ArangoDB使用谷歌的V8 JavaScript引擎来执行JavaScript代码,和node.js一样。
这意味着您可以在 ArangoDB 中运行用户定义的 JavaScript 代码,并且它会被 V8 即时编译为 native 代码。 ArangoDB 自己的一些模块也是用 JavaScript 编写的。几个第三方 JavaScript 模块,包括一些由 node.js 和 npm 使用或编写的模块,也与 ArangoDB 捆绑在一起。
关于与 node.js 和 npm 模块的兼容性:
来自 node.js 和 npm 的模块也可以在 ArangoDB 中工作,只要它们不依赖 node.js 内部结构或来自其他模块的代码。这意味着所有仅是 JavaScript 且不需要任何 Node 特定内容的模块都应该在 ArangoDB 中工作。 joi
是一个很好的例子。依赖于 node.js 特定对象或 node.js 的 C++ 扩展的 node.js/npm 模块将无法在 ArangoDB 中工作。
ArangoDB 本身是用 C++ 编写的,它的一些模块是用 JavaScript 编写的。通过 V8 包装器对象和函数,用户定义的 JavaScript 代码和捆绑的 ArangoDB JavaScript 模块可以访问 ArangoDB 的内部结构。这些函数是 C++ 函数,它们通过告诉 V8 它们存在来暴露给 JavaScript。
这是一个示例:ArangoDB 公开了一个名为 db
的 JavaScript 对象.这个对象有一些预定义的功能,例如_collection(<name>)
.当这个函数被调用时,这将是对 C++ 函数的有效调用,然后它可以处理它的 (JavaScript) 参数,在这种情况下应该是一个集合名称字符串。在 C++ 函数内部,将查找指定名称的集合。如果未找到,该函数将返回一个 JavaScript null
目的。如果找到,该函数将返回一个集合对象,包装在所谓的 V8 外部 中。对于 JavaScript 代码,这看起来像一个常规对象,但这个对象又具有一些 C++ 绑定(bind)。
为了让所有这些工作正常,服务器将注册 db
对象在 V8 上下文中开始,并为所有对象的方法注册包装函数。它将对其他对象和函数执行此操作,因此服务器内部有一个完整的 JavaScript API。
AQL ,ArangoDB 的查询语言,是用 C++ 编写的,将按原样执行。然而,一些 AQL 函数和运算符是在 JavaScript 中实现的。如果 AQL 查询使用此类函数或运算符,将生成查询特定的 JavaScript 片段,使用 V8 即时编译并执行。此外,AQL 查询可以使用用户定义的 JavaScript 函数进行计算。这些函数是常规的 JavaScript 函数,必须在命令中注册它们才能在查询中使用。这些函数的调用如上,生成并执行一段动态JavaScript代码来调用用户定义的函数。
最后,ArangoDB's Foxx framework用 JavaScript 编写,允许在 ArangoDB 服务器中定义 HTTP 路由。这些路由背后的 Action 是用户定义的,可以通过上述方式访问服务器内部和数据库数据。
关于javascript - ArangoDB 的哪些部分是用 Node-GYP 完成的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31534200/
我无法停止 arangodb docker 容器中的 arangodb 服务器。 当我执行低于一个时, $/etc/init.d/arangod 停止 $service arangodb 状态 ara
我在 java 中查询 ArangoDB 以获取数组值时遇到问题。我尝试过使用 String[] 和 ArrayList,都没有成功。 我的查询: FOR document IN documents
我想计算 ArangoDB 的服务器要求。 我知道 ArangoDB 将索引存储在 RAM 中,但是索引使用了多少空间? 最佳答案 这取决于您使用的索引类型。 您可以使用“数字”来查看需要多少内存:
我是 Arango DB 的新用户,目前正在为我的项目评估它。有人可以告诉我,您可以在 Arango DB 中创建的最大数据库数量是多少吗? 谢谢。 最佳答案 据我所知,ArangoDB 中的数据库数
我尝试从我的电脑连接到位于另一台服务器上的 ArangoDB,但似乎不成功。然后,我尝试使用输入服务器 ip http://x.x.x.x:8529 提供的 Web UI 来访问它。但也失败了。我在本
我有一个这样的文件: { "baths": 2, "beds": 3, "id": "3225C", "addrs": [ { "line2": "",
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
检索相关edge_collection中没有边的所有顶点的最佳方法是什么 我尝试使用以下代码,但自 arangodb 2.8 以来,它变得非常慢(在以前的版本中并不是很快,但比现在快了大约 10 倍)
我有许多节点通过其他类型的中间节点连接。如图所示,中间节点可以有多个。我需要找到给定数量的节点的所有中间节点,并按初始节点之间的链接数量对其进行排序。在我的示例中,给定 A、B、C、D,它应该返回节点
我有一个存储在 arangodb 中的对象,该对象具有其他内部对象,我当前的用例要求我仅更新其中一个元素。 存储对象 { "status": "Active", "physicalCode":
我正在尝试与 Arango 组合一个单元测试设置。为此,我需要能够在每次测试时重置测试数据库。 我知道我们可以直接从 REST API 删除数据库,但文档中提到创建和删除可能“需要一段时间”。 这是否
我有某种类型的事件列表,其结构如下: { createdAt: 123123132, type: STARTED, metadata: { emailAddress: "foo@bar
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 3 年前。
我发现使用 Web UI 在 arangodb 上创建新用户时遇到了麻烦。首先,我可以创建一个新用户,但无法为该用户分配一个数据库。另外,你能帮忙提供一个使用 arangodb Shell 的方法吗?
我在本地运行 ArangoDB,其中包含来自多个不同项目的数据库、集合、数据和图表。我想备份所有内容,以便重建我的系统。我知道如何备份单个数据库,但因为我有很多数据库,所以我希望一次性完成。 本质上,
应该很容易操作,但我找不到如何实现这一点。我有两个来自不同集合的文档,现在我想使用现有集合中的新 Edge 链接它们。我正在尝试像这样使用 edge-collection.save 函数:edge-c
在我解决 1000 个客户端的任务中,每个客户端都有单独的 ArangoDB,在运行时记录单独的信息......我们需要将这些信息聚合回单个主节点服务器中的集合,以便可以进行查询和报告在上面。研究 J
具有以下结构的文档: { path: String, enabled: Long, disabled: null || Long, // other fields... } 我想通过路
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 3 年前。
我想从 ArangoDB 的文档中删除一个属性。 我认为正确的方法是使用函数 UNSET(doc, attributeName1, ..., attributeNameN) .然而,仅凭这一点,数据库
我是一名优秀的程序员,十分优秀!