【AQL】COLLECT 操作

ArangoDb学习笔记————High-level operations(二) COLLECT: 这个关键词类似于Oracle的group by,用法比较多。 COLLECT variableName = expression COLLECT variableName = expression INTO groupsVariable COLLECT variableName = expression INTO groupsVariable = projectionExp... 阅读详情

COLLECT operation in AQL

COLLECT 操作

COLLECT操作允许用户根据一个或多个分组条件对数据进行分组,并提取所有不重复的值,统计各值出现的次数,并有效计算统计各种属性

COLLECT 操作的不同变体几乎涵盖了大部分数据分组和聚合的需求。而对于滑动窗口形式的聚合操作,可以采用WINDOW操作

语法

COLLECT操作有几种语法变体:

# 分组:所有表达式expression计算结果相同的文档分组,并将结果赋值给variableName。
COLLECT variableName = expression

# 分组并收集到变量:将所有表达式expression计算结果相同的文档分组,并将同一组的文档放入名为groupsVariable的数组中。
COLLECT variableName = expression INTO groupsVariable

# 分组并投影:类似于上面的分组操作,但同时将每一组的文档投影为projectionExpression的结果,并将这些结果存储到groupsVariable数组中。
COLLECT variableName = expression INTO groupsVariable = projectionExpression

# 分组并保留变量:分组的同时保留keepVariable所指定的变量值,将其添加至每个分组结果(数组元素)中。
COLLECT variableName = expression INTO groupsVariable KEEP keepVariable

# 分组并计算总数:在分组的基础上,计算每个分组的文档数量,并将数量存入countVariable。
COLLECT variableName = expression WITH COUNT INTO countVariable

# 带聚合表达式的分组:根据expression进行分组,并对每个分组执行指定的聚合操作aggregateExpression,例如求和、平均值等。
COLLECT variableName = expression AGGREGATE variableName = aggregateExpression

# 分组并聚合到变量:类似于前面的分组和聚合操作,但同时也将聚合结果与相应的分组一同存储到groupsVariable数组中。
COLLECT variableName = expression AGGREGATE variableName = aggregateExpression INTO groupsVariable

# 仅聚合:不进行分组,直接对所有文档执行指定的聚合操作aggregateExpression。
COLLECT AGGREGATE variableName = aggregateExpression

# 仅聚合并收集到变量:如果aggregateExpression返回的是一个数组(例如多维度聚合),则将其结果存储到groupsVariable数组中。
COLLECT AGGREGATE variableName = aggregateExpression INTO groupsVariable

# 仅计算总数:不进行分组,直接计算所有文档的数量,并将结果存入countVariable。
COLLECT WITH COUNT INTO countVariable

所有COLLECT操作变体都可以选择性地附加一个OPTIONS { … }子句,以提供更多配置选项来定制COLLECT行为

注:在AQL查询语言中,执行COLLECT操作后,当前作用域内的所有局部变量都将被消除。这意味着在COLLECT语句之后,仅能访问由COLLECT自身引入的变量。这些变量通常包含了分组或聚合的结果。

Grouping 语法

第一种形式的COLLECT语法仅根据在expression中定义的分组标准对结果进行分组。为了进一步处理由COLLECT产生的结果,引入了一个新的变量(通过variableName指定)。这个变量包含了分组值。

下面是一个查询示例,它查找u.city中的不同值,并将其保存在变量city中:

FOR u IN users
  COLLECT city = u.city
  RETURN { 
    "city" : city 
  }

第二种形式的COLLECT与第一种形式相似,除了它还引入了一个变量(由groupsVariable指定),该变量包含了落入同一组的所有元素。其工作原理如下:groupsVariable是一个数组,数组中的元素数量与分组内的元素数量相同。数组中的每个成员都是一个JSON对象,其中查询中定义的所有变量值都绑定到相应的属性上。请注意,这会考虑在COLLECT语句之前定义的所有变量,但不包括顶层(FOR循环外部)定义的变量,除非COLLECT语句本身就在顶层,那样的话所有变量都会被考虑进去。此外,请注意为了提高性能,优化器可能会将LET语句移出FOR语句。

FOR u IN users
  COLLECT city = u.city INTO groups
  RETURN { 
    "city" : city, 
    "usersInCity" : groups 
  }

在上述示例中,users数组将按属性city进行分组。结果是一个新的文档数组,其中每个元素代表一个唯一的u.city值。由于使用了INTO子句,因此每座城市的原始数组(此处为users)中的元素都可在变量groups中访问到。

COLLECT 也允许指定多个分组标准。各个分组标准可以通过逗号进行分隔:

FOR u IN users
  COLLECT country = u.country, city = u.city INTO groups
  RETURN { 
    "country" : country, 
    "city" : city, 
    "usersInCity" : groups 
  }

在上述示例中,数组users首先按国家进行分组,然后按城市进一步分组。对于每一对独特的国家和城市组合,都会返回该组合下的所有用户。\

丢弃不必要的变量

COLLECT的第三种形式允许使用任意投影表达式来重写groupsVariable的内容:

FOR u IN users
  COLLECT country = u.country, city = u.city INTO groups = u.name
  RETURN { 
    "country" : country, 
    "city" : city, 
    "userNames" : groups 
  }

在上述示例中,仅使用u.name作为投影表达式。因此,对于每篇文档,只有这个属性会被复制到groupsVariable变量中。相比没有指定投影表达式时将作用域内所有变量都复制到groupsVariable的情况,这种方式通常效率更高。

INTO后面的表达式也可以用于任意计算:

FOR u IN users
  COLLECT country = u.country, city = u.city INTO groups = { 
    "name" : u.name, 
    "isActive" : u.status == "active"
  }
  RETURN { 
    "country" : country, 
    "city" : city, 
    "usersInCity" : groups 
  }

COLLECT 还提供了一个可选的 KEEP 子句,用于控制哪些变量将被复制到由 INTO 创建的变量中。如果不指定 KEEP 子句,则作用域内的所有变量都将作为子属性被复制到 groupsVariable 中。这种方式虽然安全,但如果作用域内有许多变量或这些变量包含大量数据时,可能对性能产生负面影响。

以下示例仅将变量name复制到groupsVariable中。作用域中存在的其他变量u和someCalculation不会被复制,因为它们未在KEEP子句中列出

KEEP 子句只能与 INTO 结合使用,并且只能包含有效的变量名称。KEEP 支持指定多个变量名称。在这个例子中,只保留了用户的名字,并按城市分组后返回每个城市的用户名列表。

组长度计算

COLLECT 还提供了一个特殊的 WITH COUNT 子句,可以高效地计算每个分组的成员数量。

最简单的形式是仅仅返回进入 COLLECT 的项目数量:

FOR u IN users
  COLLECT WITH COUNT INTO length
  RETURN length

上述代码等同于,但不如以下代码高效:

RETURN LENGTH(users)

WITH COUNT 子句也可用于高效计算每个分组内的项目数量:

FOR u IN users
  COLLECT age = u.age WITH COUNT INTO length
  RETURN {
    "age" : age,
    "count" : length
  }

WITH COUNT 子句只能与 INTO 子句一起使用

聚合

使用COLLECT语句可以实现对数据按组进行聚合操作。如果只想确定每组的长度(即每组元素的数量),可以使用前面所述的WITH COUNT INTO变体。

对于其他的聚合操作,可以在COLLECT结果上运行聚合函数:

FOR u IN users
  COLLECT ageGroup = FLOOR(u.age / 5) * 5 INTO g
  RETURN { 
    "ageGroup" : ageGroup,
    "minAge" : MIN(g[*].u.age),
    "maxAge" : MAX(g[*].u.age)
  }

然而,上述方法需要在所有组的收集操作期间存储所有组值,这可能是低效的。

COLLECT操作的特殊AGGREGATE变体允许在收集操作过程中逐步构建聚合值,因此通常更为高效
使用AGREGATE 将上面查询变为

FOR u IN users
  COLLECT ageGroup = FLOOR(u.age / 5) * 5 
  AGGREGATE minAge = MIN(u.age), maxAge = MAX(u.age)
  RETURN {
    ageGroup, 
    minAge, 
    maxAge 
  }

AGGREGATE 关键字只能在 COLLECT 关键字之后使用。如果使用 AGGREGATE,它必须紧跟在分组键声明的后面。如果没有使用分组键,则它必须直接跟随 COLLECT 关键字:

FOR u IN users
  COLLECT AGGREGATE minAge = MIN(u.age), maxAge = MAX(u.age)
  RETURN {
    minAge, 
    maxAge 
  }
  • 每个AGGREGATE赋值的右侧只允许使用特定的表达式:
    在顶层,聚合表达式必须是对支持的聚合函数之一的调用:
    • LENGTH() / COUNT()
    • MIN()
    • MAX()
    • SUM()
    • AVERAGE() / AVG()
    • STDDEV_POPULATION() / STDDEV()
    • STDDEV_SAMPLE()
    • VARIANCE_POPULATION() / VARIANCE()
    • VARIANCE_SAMPLE()
    • UNIQUE()
    • SORTED_UNIQUE()
    • COUNT_DISTINCT() / COUNT_UNIQUE()
    • BIT_AND()
    • BIT_OR()
    • BIT_XOR()
  • 聚合表达式不能引用COLLECT本身引入的变量

COLLECT vs. RETURN DISTINCT

为了使结果集唯一,可以使用COLLECT或RETURN DISTINCT。

FOR u IN users
  RETURN DISTINCT u.age
FOR u IN users
  COLLECT age = u.age
  RETURN age

在幕后,这两种变体都创建了一个CollectNode。但是,它们使用具有不同属性的COLLECT的不同实现:

  • RETURN DISTINCT保持结果的顺序,但仅限于一个值。
  • COLLECT更改结果的顺序(排序或未定义),但它支持多个值,并且比RETURN DISTINCT更灵活。

除了COLLECT复杂的分组和聚合功能外,它还允许您在RETURN之前放置LIMIT操作,从而可能提前停止COLLECT操作。

COLLECT options

method

COLLECT有两种变体可供优化器选择:排序变体和散列变体。方法选项可以在COLLECT语句中用于通知优化器首选方法“排序”或“哈希”。

COLLECT ... OPTIONS { method: "sorted" }

如果用户未指定任何方法,则优化器将创建一个使用排序方法的计划,如果COLLECT语句符合条件,则将使用哈希方法创建一个附加计划。

如果显式设置为sorted,则优化器总是会选择排序版本的COLLECT方法,并且不会生成使用哈希版本的执行计划。如果显式设置为hash,则只有当COLLECT语句满足条件时,优化器才会创建使用哈希方法的执行计划。不是所有的COLLECT语句都能使用哈希方法,尤其是那些不执行任何分组操作的语句。若COLLECT语句符合条件,将会仅有一个使用哈希方法的执行计划。否则,优化器将默认使用排序方法。

COLLECT语句使用sorted方法时,它要求输入数据按照在COLLECT子句中指定的分组条件预先排序。为了保证结果正确性,优化器会在COLLECT语句之前自动插入一个SORT操作。如果有对分组条件已经存在的排序索引,优化器可能会在后续阶段进一步优化掉这个SORT操作。

若某个COLLECT语句满足使用哈希变体的条件,优化器会在规划阶段开始时为其生成一个额外的执行计划。在这个计划中,COLLECT前面不会添加额外的SORT语句,因为哈希版本的COLLECT不需要有序输入。相反,通常会在COLLECT之后添加一个SORT语句来对输出结果进行排序,不过这个SORT也可能在后续阶段被优化掉。

如果用户对COLLECT的结果排序顺序并不关心,那么在COLLECT之后添加额外的SORT null指令可以指示优化器完全移除排序操作。这是因为SORT null告诉优化器无需对结果进行实际排序,从而可能避免不必要的排序开销。然而,请注意,这个功能的存在与否取决于具体的数据库系统和其优化器的实现细节。在ArangoDB中,并未明确提到SORT null这样的语法,但在某些数据库中类似的概念可用于指导优化器做出更高效的执行计划。在实践中,确认是否以及如何能够消除这类冗余排序操作,最好参考具体数据库系统的文档或咨询相关的专家资源。

FOR u IN users
  COLLECT age = u.age
  SORT null  /* note: will be optimized away */
  RETURN age

当没有显式设置首选方法时,查询优化器会基于成本估算选择最适合的COLLECT变体。针对不同COLLECT变体创建的执行计划会经过常规优化流程处理。最终,优化器会选择预计总成本最低的那个计划来执行。

一般而言,如果在分组条件上存在已排序的索引,则应当优先考虑使用COLLECT的有序变体。这种情况下,优化器可以消除COLLECT前的SORT操作,因此不会有额外的排序步骤。

反之,如果分组条件上没有可用的排序索引,那么有序变体所需的前置排序操作可能会非常昂贵。在这种情况下,优化器很可能倾向于使用哈希变体的COLLECT,因为它不要求输入数据有序。

要确切知道查询中实际使用的COLLECT变体,可以通过查看查询的执行计划来确定,特别是检查CollectNode节点的注释部分,该注释通常会显示所采用的具体收集策略及其相关属性。这样就能了解优化器选择的是有序收集还是哈希收集方式。通过分析执行计划,开发者可以深入了解数据库是如何执行查询并作出优化决策的。

Execution plan:
 Id   NodeType                  Est.   Comment
  1   SingletonNode                1   * ROOT
  2   EnumerateCollectionNode      5     - FOR doc IN coll   /* full collection scan, projections: `name` */
  3   CalculationNode              5       - LET #2 = doc.`name`   /* attribute expression */   /* collections used: doc : coll */
  4   CollectNode                  5       - COLLECT name = #2   /* hash */
  6   SortNode                     5       - SORT name ASC   /* sorting strategy: standard */
  5   ReturnNode                   5       - RETURN name
【AQL教程1】语法 图查询语言AQL语法 阅读详情

相关推荐

MATLAB 论文复现——面向紧急需求响应的规模化灵活资源负荷管理快速决策方法

其次,对灵活资源参与EDR的功率分配模型进行了建模,并提出了基于分层分布式共识算法的快速决策方法,对功率分配模型进行快速求解,以满足EDR实时性的需求,在保证较高精度的前提下提高了决策速度。[1]孔祥玉,杨至端,孙裕策,等.面向紧急需求响应的规模化灵活资源负荷管理快速决策方法[J/OL].电力系统自动化,1-13[2024-07-29].http://kns.cnki.net/kcms/detail/32.1180.TP.20240709.1843.002.html.关键词: 规模化灵活资源;

sjr1478的博客 374

ArangoDB基本语法

ArangoDB基本语法ASQL(基础)插入(insert)插入document插入edge查询(return)Select * from CharactersSelect name as name1, surname as surname1 from CharactersSelect b.en from Characters a,Traits b where b._key in a.traits...

玉婷(alla) 3182

AD17入门简单教程(一)

AD17入门简单教程 我写这篇文章主要是因为最近刚学习完了AD17,想做一下总结,也希望通过自己心得的帮助一些刚入门AD17的小白。 总结一共分为两大部分,包括AD17的下载安装与汉化(文末有详细链接)、工程的创建、元器件库、PCB、走线中的常用命令介绍,文末还附有完整的PCB工程以及讲解视频。 第一部分工程的创建及元器件库常用命令 1.首先在桌面上创建一个文件夹,然后在AD17点击左上角的文件中...

qq_45433195的博客 2万+

ArangoDB查询语言AQL语法

1.查询类型 AQL查询必须返回一个结果(使用返回关键字return)或执行数据修改操作(通过使用关键字INSERT,UPDATE,REPLACE,REMOVE或UPSERT中的一个)。如果AQL解析器在同一个查询中检测到多个数据修改操作,或者它无法确定该查询是用于数据检索还是修改操作,则它将返回错误。AQL只允许一个查询字符串;因此分号来表示一个查询和独立的多个查询(如SQL)是不允许的。 ...

perpetualTime的博客 2658

电蚊拍为什么能秒杀蚊子?深入解析两种四倍压整流电路设计差异

本文深入解析电蚊拍秒杀蚊子的核心原理——四倍压整流电路设计,对比对称式与级联式两种方案的性能差异。通过详细电路分析、实测数据对比和选型建议,揭示高压电路设计的关键技术要点,为电子爱好者和工程师提供实用参考。

rust6ferris的博客 749

【gateway nc adapter虚拟网卡 win11 联想】问题的解决

由于需要登录公司内网,于是启用奇安信VPN。但启动后报出网关未连接的问题,于是我检查了我的网络适配器,并尝试解决,以下给出几种我实践过程中的行动,并附带最后成功的解决方法。

m0_73602417的博客 6550

ArangoDB高级查询(二)

连接查询 在这之前我们插入如下的数据 { "name": "Ned", "surname": "Stark", "alive": false, "age": 41, "traits": ["A","H","C","N","P"] } "traits": ["A","H","C","N","P"]是一个没有明显含义的字母表,它们是另一个集合的文档关键字,我们可以使用这些关键字来将这...

perpetualTime的博客 812

非线性动力学_用MatCont分析非线性动力学方程组(一)

写在前面:笔者打算写两到三篇系列文章介绍MatCont,此为第一篇《用MatCont分析非线性动力学方程组(一)》。MatCont是一个基于Matlab而开发的免费工具包,专门用来做非线性动力学模型分叉、向量场、周期性等分析,符号(连续性)运算和数值(离散性)运算均适用。该工具的开发及研究项目由比利时Ghent大学的Willy Govaerts教授、荷兰Utrecht大学的Yuri Kuznets...

weixin_39700215的博客 2766

【AQL】AQL高级操作

高级操作是查询语言的核心语言结构,用于执行查找和返回数据以及创建和修改文档等操作。

Number_In的博客 483

【SAP PO】SAP PO 接口配置完整教程之一RFC服务发布

SAP RFC开发,PO接口配置

XLevon的博客 2万+

英伟达DeepStream学习笔记7——DeepStream接入USB相机并实现广角摄像头的畸变矫正

deepstream官方提供了一个畸变矫正的例子,包含了鱼眼和普通广角的矫正。我目前准备做一个广角的畸变矫正,我已经使用opencv实现功能,目前增加到deepstream框架中。示例代码在\opt\nvidia\deepstream\deepstream-5.0\sources\apps\sample_apps\deepstream-dewarper-test 中,鱼眼矫正——deepstream官方版 https://developer.nvidia.com/blog/calibration-trans

耶律大石的博客 1602

Study -ArangoDB之高层操作符 & 数组运算符

High-level operations 操作符 含义 FOR 迭代数组的所有元素 RETURN 生成查询结果 FILTER 将结果限制为与任意逻辑条件匹配的元素 SORT 强制排序一系列已经生成的中间结果 LIMIT 将结果中的元素数量减少到最多指定的数字,可选择跳过元素(分页) LET 为变量分配任意值 COLLECT 按一个或多个组标准对数组进行分组...

LLLLLLLLLLe的博客 485

SAP_ABAP_MM_BAPI清单案例教程——采购发票校验/预制_BAPI_INCOMINGINVOICE_PARK_MIRO

SAP ABAP BAPI_INCOMINGINVOICE_PARK BAPI 采购发票预制 采购发票校验 代码模版

java_zhong1990的专栏 1962

ArangoDB高级操作

原文:ArangoDB High-level operations 以下介绍以下高级操作: FOR:迭代数组的所有元素。RETURN:生成查询结果。FILTER:将结果限制为与任意逻辑条件匹配的元素。SORT:强制一系列已经生成的中间结果。LIMIT:将结果中的元素数量减少到最多指定的数字,可选择跳过元素(分页)。LET:为变量分配任意值。COLLECT:按一个或多个组标准对数组进行分组。

YuZongTao 5437

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ArangoDB

ArangoDB 一、ArangoDB Linux 安装 一、ArangoDB Linux 安装 1.下载安装包 https://www.arangodb.com/download/ 2.安装arangodb 这边下载的Centos,rpm安装包 rpm -ivh arangodb3-3.9.0-1.0.x86_64.rpm 3.设置root密码 运行arango-secure-installation 4.为了能在局域网中访问WEB界面,修改配置文件/etc/arangodb3/arangod.c

weixin_44809337的博客 2782

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【AQL】AQL语法

该文档主要是翻译自。

Number_In的博客 1673

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【AQL】WINDOW 操作

由于val为0,第一行的值范围为[-10,5],因此第一行和第二行的值加起来为5,平均值为2.5。最后一行的值范围是[20,35],因为val是30,这意味着最后四行的总和为100,平均值为25(该范围包括在内,即val落在值为20的范围内)。如果使用这样的持续时间,则当前文档的属性值必须是一个数字,并被视为以毫秒为单位的数字时间戳。对于第一行,这仅仅是10,对于第二行,它是10+0,对于第三行,10+0+9,依此类推。偏移量计算是通过添加或减去在以下和前面的属性中指定的数字偏移量来执行的。

Number_In的博客 1141

AQL中的COLLECT魔法:快速统计测试结果

假设我们有一个测试数据集,包含多个设备的测试结果,每个结果包含多个测试项目,如拉力、切力、压力等。每项测试的结果只有两种:PASS(通过)或FAIL(失败)。我们需要统计每个测试项目的通过和失败次数。通过使用AQL的COLLECT语句,我们能够快速、有效地统计大型数据集中的测试结果。这种方法不仅适用于处理PASS/FAIL这样的二元结果,也可以扩展到更复杂的统计需求。希望这篇博客能帮助大家在处理类似问题时找到一个高效的解决方案。

2501_90323865的博客 365

【AQL】SORT操作

如果优化规则处于活动状态,则第二个SORT将生效,因为它涵盖了相同的friend.age属性,并且在出现平局的情况下还会按另一个属性进行排序,使其更加准确。但是,如果第二个SORT表达式中的属性顺序相反,如SORT friend.id, friend.age,则最后一个SORT将生效。在优化过程中,AQL 优化器会优化常量 SORT 表达式,但如果优化器不需要考虑任何特定的排序顺序,则明确指定它们可能会实现进一步的优化。当遍历一个集合时,除非使用SORT操作显式定义排序顺序,否则文档的顺序是不确定的。

Number_In的博客 525

ArangoDB-AQL简单操作

尝试几个简单的查询 1、返回数据集"airports"中所有的airports: FOR airport IN airports RETURN airport 2、只返回California的airports: FOR airport IN airports FILTER airport.state == "CA" RETURN airport 3、返回每个国家的机场数量 FOR airport IN airports COLLECT state = airport.s

Java小虎 1248

图数据库查询实战:ArangoDB的AQL语言从基础到特色功能全解析

摘要:本文深入解析ArangoDB图数据库的AQL查询语言,从基础语法到特色功能。AQL支持文档和图数据查询,包含DOCUMENT()快速查找、FOR+FILTER遍历筛选、SORT+LIMIT排序限制等核心功能。特色功能包括GeoJSON地理空间查询和ArangoSearch全文检索,前者支持基于经纬度的空间查询,后者提供跨集合索引、文本转换和相关性排序能力。文章通过机场数据库实例演示AQL应用,帮助开发者掌握图数据库查询实践。

weixin_46808323的博客 1121

【AQL】FILTER操作

到达第二个FILTER块的文档不超过5个,并且并非所有文档都符合性别标准,即使集合中有5个以上的活跃女性用户。如果使用多个FILTER语句,它们的结果将通过逻辑AND组合,这意味着所有过滤条件都必须为true,才能包含元素。如果条件结果为false,当前元素将被跳过,因此不会进一步处理,也不会成为结果的一部分。在上例中,users中的所有元素active属性值为true并且age属性值小于39才会被包含在结果中,其他元素将被跳过。请注意,FILTER语句的位置可能会影响查询的结果。

Number_In的博客 489

ArangoDb学习笔记————AQL Fundamentals(基本语法一)

查询结果类型: AQL 查询要么返回一个结果(return关键字),要么执行一次数据更新操作(INSERT,UPDATE,REPLACE,REMOVEorUPSERT)。AQL解析器如果检测到在一次查询里有超过一次的数据更新操作,或者无法解析时会报错。AQL只支持单次查询。 空格: 可以用空格来使查询语句更加美观,如果需要在变量或者字符串中保留空格,需要用引号包起来。 注释: ...

xugc2015的博客 702

Ubuntu 14.04 部署 ArangoDB 3.7 实战指南:老旧系统兼容与 AQL 优化

多模型数据库是指能同时支持文档、图和键值三种数据结构的统一存储系统,其核心价值在于降低异构数据管理复杂度。ArangoDB 作为典型代表,通过原生 AQL 查询语言实现跨模型统一操作,兼顾 SQL 表达力与 JSON 灵活性。在工业边缘等受控环境中,老旧操作系统(如 Ubuntu 14.04)因内核、glibc 和 OpenSSL 版本锁定难以升级,此时静态链接、ABI 兼容的旧版 ArangoDB(如 3.7.15)成为唯一可行方案。它绕过 systemd 依赖、规避动态库冲突,并支持 upstart 服

weixin_33585822的博客 245

ArangoDB 学习手记

ArangoDB 语法学习

lookbbs的专栏 437
上一篇: 【AQL】LET操作
下一篇: 【AQL】WINDOW 操作
尹正义
博客等级 码龄6年 134粉丝 22原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值