ArangoDB内建了很多索引结构,用于解决不同的应用场景(个人感觉有点过多了。。)

  • Primary Index:

    • 主键索引: id, key
    • unsorted hash index
    • 内存索引
  • Edge Index
    • 边索引: from, to
    • hash index
    • 内存索引
  • Hash Index: 精确查询
    • unique hash index
    • unique, sparse hash index
    • non unique hash index
    • non unique, sparse hash index
    • 内存索引
  • Skiplist Index: 范围查询
    • unique skiplist index
    • unique, sparse skiplist index
    • non-unique skiplist index
    • non-unique, sparse skiplist index
    • 内存索引
  • Persistent Index
    • a sorted index with persistence
    • implementation is using the RocksDB engine
    • is used as a secondary indexes like MySQL
    • O(log n) to get the primary key + O(1) to fetch the actural document
    • sorted index, can be used for point lookups, range queries and sorting operations
  • Geo Index
    • uses Hilbert curves to implement geo-spatial indexes
    • Using Hilbert curves and Polyhedrons for Geo-Indexing
  • Fulltext Index
    • word tokenization is done using the word boundary analysis provided by libicu
    • words are indexed in their lower-cased form
    • supports complete match queries (full words) and prefix queries, plus basic logical operations such as and, or and not for combining partial results.

TIPS & NOTES

1、ArangoDB的索引除了Persistent Index,其他的都是纯内存索引,因此内存占用率会比较高;另外,重启的时候所有内存索引需要重新构建(或者打开某个Collection,该Collection相关的索引也会构建),导致启动非常耗时而且耗CPU。这也是后来引入Persitent Index的原因。 Suggestion: Have indexes also on disk besides "only memory indexes" #209 。

另外,即使是内存索引,如果 size of indexes > size of ram,那么也会被操作系统换出。 The kernel will swap only to avoid an out of memory condition 。另一方面,ArangoDB的数据是以内存映射文件(Memory-Mapped Files)的方式加载的,数据量稍微一大,必然会发生换页。

2、相对于其他的图存储,ArangoDB很友好的支持组合索引、数组索引和嵌套属性索引。

  • Combined index over multiple fields

    • db.posts.ensureIndex({ type: "hash", fields: [ "name", "age" ] })
  • Indexing array values
    • db.posts.ensureIndex({ type: "hash", fields: [ "tags[*]" ] });
  • Indexing attributes and sub-attributes
    • db.posts.ensureIndex({ type: "hash", fields: [ "name" ] })
    • db.posts.ensureIndex({ type: "hash", fields: [ "name.last" ] })

3、ArangoDB还引入 Vertex-Centric Indexes 解决图遍历过程中的supernode问题

4、其实从功能上出发,可以更好的理解为什么需要这些索引类型:

  • 精确匹配 => Hash(Unsorted)
  • 范围查询 => Sorted => B+ Tree or Skiplist
  • 模糊匹配 => Fulltext
  • 地理位置查询 => Geo

这些索引理论上来说应该是可以内存,也可以是持久化的。是否持久化应该是一个选项(flag),而不是一种索引类型。

参考文章

  1. Handling Indexes
  2. Suggestion: Have indexes also on disk besides "only memory indexes" #209
  3. Frequently asked questions

ArangoDB的索引学习相关推荐

  1. MySQL中的联合索引学习教程

    MySQL中的联合索引学习教程 这篇文章主要介绍了MySQL中的联合索引学习教程,其中谈到了联合索引对排序的优化等知识点,需要的朋友可以参考下 联合索引又叫复合索引.对于复合索引:Mysql从左到右的 ...

  2. MySQL 索引学习笔记

    MySQL 索引学习笔记 索引基本概念 索引优点 B-Tree 索引 基本原理 使用场景 使用限制 哈希索引 基本原理 使用限制 自适应哈希索引 处理哈希冲突 相关面试题 高性能索引策略 独立的列 前 ...

  3. mysql 非等值条件 索引_mysql 索引学习--多条件等值查询,顺序不同也能应用联合索引啦...

    以前学习这一块的时候,是说:假设建立了联合索引a+b,那么查询语句也一定要是这个顺序才能应用该索引. 那么实际是怎样呢,经过mysql这么多次版本升级,相信mysql已经给我们做了某些优化. 下面是我 ...

  4. mongodb之索引学习

    学习索引分类和创建索引:                 1._id索引 大多数集合默认的索引 2.单键索引:手动创建,一个单一的值 3.多建索引:组合函数 4.复合索引 :最左前缀原则 5.过期索引 ...

  5. mysql教程联合索引_MySQL中的联合索引学习教程

    联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支持a | a,b| ...

  6. sql server 索引学习1

    1 什么是聚集和非聚集索引 SQL SERVER提供两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclustered index,也称非聚类索引.非簇 ...

  7. MySQL之权限索引学习整理

    显示本地root用户权限 show grants for root@localhost\G; 显示任意%域用户权限 show grants for root\G; 查询所有用户 select * fr ...

  8. MySQL的索引学习

    文章目录 索引 自动创建索引 手动创建索引 使用索引 单列索引 PRIMARY NORMAL UNIQUE FULLTEXT 组合索引(复合索引/联合索引) 索引不足之处 索引使用注意事项 索引方式 ...

  9. SQL Server的复合索引学习【转载】

    概要什么是单一索引,什么又是复合索引呢? 何时新建复合索引,复合索引又需要注意些什么呢?本篇文章主要是对网上一些讨论的总结. 一.概念 单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上. ...

最新文章

  1. Smiles2vec | 用于预测化学性质的深度神经网络
  2. ssms没有弹出服务器验证_Nginx服务器负载均衡及生成ssl密钥对、Nginx配置ssl操作示例...
  3. iOS核心动画学习整理
  4. 使用netty实现聊天室功能
  5. python练习:科赫小雪花包裹
  6. Velocity教程 (zhuan)
  7. iOS 开发之几个 Demo 分享网站
  8. 基于line2d算法的模板匹配
  9. 水电站计算机监控作用,计算机监控系统在水电站中的应用
  10. IMDB电影评论文本分类
  11. geforce experience出现错误尝试重启PC
  12. 服务器ahci模式安装系统,ahci模式下安装win7系统的方法
  13. vue与nodejs
  14. AI Gossip | 八卦人工智能的前世今生
  15. oracle 抽样_[转载]利用ORACLE实现数据抽样
  16. FPGA图像处理HLS实现RGB转灰度,提供HLS工程和vivado工程源码
  17. HDU-2545 树上战争
  18. AtCoder Beginner Contest 167 F.Bracket Sequencing
  19. [JVM]了断局: Class文件结构梳理
  20. 《Web安全之机器学习入门》笔记:第九章 9.4 支持向量机算法SVM 检测DGA域名

热门文章

  1. Rmarkdown对租房数据进行数据分析(普通画图方法)
  2. Apollo项目坐标系研究
  3. 制作自己的Vscode主题插件
  4. 融云 IM SDK 集成 --- 刷新会话界面和会话列表界面
  5. cad菜单栏快捷键_天正CAD界面“菜单栏”不见了怎么办?教你3招秒解决,实用神技巧...
  6. java走向_Java 程序员走向“人生巅峰”的20个建议
  7. 编写函数prime(n),功能是接收一个正整数,判断是否是素数,若为素数则返回1,否则返回0。
  8. linux pclint配置_pclint设置 | 学步园
  9. 在线文档查看方案- 易度云查看
  10. 转战C#---day1