关于 ArangoDB 中多个索引的使用

2023-12-02

具有以下结构的文档:

{
  path: String,
  enabled: Long,
  disabled: null || Long,
  // other fields...
}

我想通过路径前缀和某些数字与文档时间戳之间的数字关系的组合来查找文档:(伪代码)

SELECT e FROM entries 
WHERE 
  e.path STARTS WITH "somePrefix" 
  AND e.enabled <= timestamp 
  AND (
    e.disabled == null 
    OR timestamp < e.disabled
  )

哪种索引结构(如果有的话)对我最有利?我应该有一个非稀疏的跳过列表索引吗enabled场 + 稀疏场disabled以及全文非稀疏全文path? ArangoDB 是否能够利用多个索引来执行这些类型的查询?我阅读了有关索引使用的文档页面,但我仍然不清楚。


如果过滤条件与逻辑或,且指标满足or分支机构条件。

在您的查询中,您需要结合三个条件逻辑和,后者包含一个or.

没有STARTS WITHAQL 中的谓词,但您可以使用使用前缀边界构造的范围查询:e.path >= @lower && e.path < @upper。对于搜索值为"somePrefix",界限将转换为@upper being "somePrefix", and@lowerbeing“somePrefiy”`(最后一个字符的搜索值加一)。

创建跳跃列表索引path将使查询使用该索引。

包括搜索条件enabled,到目前为止的组合条件是e.path >= @lower && e.path < @upper && e.enabled <= @timestamp。虽然可以在多个属性上创建跳跃列表索引,但这里不会在这两个属性上使用它path and enabled,但仅限于path。反转索引属性的顺序(即enabled首先,然后path)也无济于事,因为这样索引将用于enabled仅,但不于path.

一般来说,跳表索引将用于条件中可以产生连续范围的部分。如果最左边的索引属性用于相等比较(例如e.path == @path && e.enabled <= @timestamp会起作用),但如果其最左边的索引属性是非相等比较(例如e.path >= @lower && e.path <= @upper or @e.enabled <= @timestamp),那么它不会查看其进一步的索引属性,因为无论如何它都会产生不连续的范围。

还可以选择创建跳过列表索引disabled。这允许优化器在零件上使用该索引e.enabled <= @timestamp && (e.disabled == null || @timestamp < e.disabled)。它可以将其转变为e.disabled == null || @timestamp < e.disabled,然而这看起来并不是很有选择性。

总之:对于该特定查询似乎没有一个好的索引选择。如果你能以某种方式改变STARTS WITH进行相等比较,那么您可以创建一个组合的跳过列表索引path and enabled,而且它可能是相当有选择性的。 如果你的STARTS WITH前缀总是相同的大小,可能值得将前缀保存在额外的属性中,该属性可以代替原始值进行索引,并使用相等比较进行查询:e.pathPrefix == @prefix && e.enabled <= @timestamp。 这需要为每个文档保存和维护额外的前缀属性,但在启用更具选择性的索引时可能是值得的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于 ArangoDB 中多个索引的使用 的相关文章

  • 在 ArangoDB 中使用相同边定义的多个图

    我正在评估 ArangoDB 并尝试创建多个可能包含相同节点集合和相同边集合的图 即使每个图可能包含不同的物理文档和边 然而 当尝试创建一个使用已在另一个图中使用的边集合的图时 我得到 1921 边缘集合已在边缘定义中使用 error 当图
  • 如何在 arangodb 的 AQL 中引用/转义字段名称?

    我找不到在哪里引用其中包含空格的字段名称 例如在执行时 FILTER s key a Supplier Id 上面的 sql 样式引用不起作用 数组访问也不起作用 正确的方法是什么 现在明白了 我被 SQL 咬住了 忘记了相等比较是用 在
  • ArangoDB 的 SPARQL 接口

    对于 Arangodb 我知道它自己的查询语言 AQL 据我所知 还有一个附加组件 允许使用 Gremlin 进行图形遍历等 在我的一个项目中 我们强烈使用 SPARQL 因此 有没有办法使用 SPARQL 作为 Arangodb 的查询语
  • 顶点和边的模型架构

    如何像 OrientDB 中那样验证图 顶点和边 数据 例如 如果我的图有格式的顶点 边 name any name age 13 如何将它与定义良好的模式 带有验证 相关联 在OrientDB中 还具有将数据存储在顶点和边中的功能 并且每
  • docker容器中arangodb数据备份策略

    我想备份 arangodb 数据 以防 arangodb 在 docker 容器中运行 arangodb 的数据作为卷安装到主机系统 一种解决方案是创建一个 docker 映像 基于官方 arangodb 映像 其中包含用于备份的脚本阿兰戈
  • 如何解决 Arango 查询承诺错误? [复制]

    这个问题已经存在了 我一直在尝试使用肥皂消息从 Arangodb 获取查询结果到我的前端服务 Angular 4 我能够获得查询结果 但在 console log 中打印出来 但是我如何在这个功能 Service 下获取它 这样我就可以输入
  • 随机选择ArangoDB中的一个文档

    有没有办法使用 AQL 从集合中随机返回文档 我想创建一个随机图用于测试目的 我还没有弄清楚如何从集合中随机选择文档 我希望我能够做这样的事情 db query RETURN nodes RAND 0 LENGTH nodes toArra
  • ArangoDB 分面搜索性能

    我们正在评估 ArangoDB 在构面计算空间中的性能 还有许多其他产品能够通过特殊的 API 或查询语言执行相同的操作 马克逻辑方面 ElasticSearch 聚合 Solr 分面等 我们知道 Arango 中没有特殊的 API 来显式
  • 我的树形图的 Arangodb 自定义过滤器/访问者

    我有一个带有两个边定义的图 如下所示 isDepartment organisation gt organisation hasAccess user gt organisation 组织嵌套在树中 无循环 有多个顶级组织 没有任何传入is
  • 如何将 AQL 的所有结果合并到具有自定义属性的单个文档中

    我有一个 AQL 查询遍历图 它始终应从一组唯一的集合中返回固定数量的文档 因此每个集合只会发生一次并且仅包含一个文档 我希望将它们全部合并到反映文档集合名称的属性下的单个文档中 查询很简单 FOR v IN ANY vertex key
  • 对象内部字段的 Arangodb AQL 更新

    给出以下集合文档示例 timestamp 1413543986 message message readed 8 null 9 null 22 null type 1014574149174 如何使用键 readed 更新对象中特定键的值
  • 如何在ArangoDB中存储图像?

    我想将图像作为图像文件存储在 ArangoDb 中 我想知道是否有相同的 API 或 Java API 提前感谢您 在 ArangoDB 中存储二进制数据是一项长期存在的功能请求 https github com arangodb aran
  • 节点高速通道-会话管理

    我为 ArangoDB for ConnectJS 编写了一个会话存储驱动程序 它正在工作 尽管仍处于 alpha 阶段 但我有几个问题 过期属性为 false 的第一个会话仅在用户代理的持续时间内保留 我注意到浏览器窗口关闭时不会调用 s
  • ArangoDB 和用户定义的函数或存储过程

    ArangoDB 文档 Foxx 部分 说 由于 Foxx 直接在 ArangoDB 内部运行 因此您可以将处理请求所需的所有数据库查询和逻辑捆绑在一个位置 除了使用 Foxx 框架 之外 还有其他 更原生 的方法来实现与 ArangoDB
  • 转储数据库并以新名称重新导入

    如果我需要使用 MySQL 将数据库 foo 的内容复制到第二个数据库 bar 中 我通常会这样做 mysqldump u root foo gt foo sql mysql u root e CREATE DATABASE bar mys
  • 如何使用 ArangoJs 将文档存储在 ArangoDb 图中?

    我正在使用 Nodejs 应用程序中的最新版本的 ArangoDb 和 ArangoJs 我有以下两个顶点 users tokens tokens顶点包含向其中一个用户发出的安全令牌users顶点 我有一个名为的边缘定义token belo
  • 管理多租户 ArangoDB 连接

    我使用 ArangoDB Go 使用 go driver 并且需要实现多租户 这意味着每个客户都将在单独的数据库中拥有他的数据 我想要弄清楚的是如何使这种多租户发挥作用 我知道为每个请求创建一个新的数据库连接是不可持续的 这意味着我必须维护
  • MongoDB + Neo4J vs OrientDB vs ArangoDB [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我目前正处于 MMO 浏览器游戏的设计阶段 游戏将包括一些实时位置的图块地图 因此每个单元格的图块数据 和通用世界地图 我更喜欢使用 Mongo
  • 远程连接 ArangoDB

    我尝试从我的电脑连接到位于另一台服务器上的 ArangoDB 但似乎不成功 然后我尝试使用通过输入服务器 IP 提供的 Web UI 来访问它http x x x x 8529 http x x x x 8529但也失败了 我在本地主机 A
  • ArangoDB:(1 个具有多个边缘定义的图)Vs(每个图 1 个边缘定义)

    我想知道在一个图中拥有多个边定义与每个图都有一个边定义相比是否有任何优势 谢谢你的帮助 使用多个边缘定义而不是仅使用一个边缘定义有多种原因 显示内容差异 您可能需要不同的边缘集合bought and watched 不过 这也可以通过使用标

随机推荐