ArangoDB的索引学习
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),而不是一种索引类型。
参考文章
- Handling Indexes
- Suggestion: Have indexes also on disk besides "only memory indexes" #209
- Frequently asked questions
ArangoDB的索引学习相关推荐
- MySQL中的联合索引学习教程
MySQL中的联合索引学习教程 这篇文章主要介绍了MySQL中的联合索引学习教程,其中谈到了联合索引对排序的优化等知识点,需要的朋友可以参考下 联合索引又叫复合索引.对于复合索引:Mysql从左到右的 ...
- MySQL 索引学习笔记
MySQL 索引学习笔记 索引基本概念 索引优点 B-Tree 索引 基本原理 使用场景 使用限制 哈希索引 基本原理 使用限制 自适应哈希索引 处理哈希冲突 相关面试题 高性能索引策略 独立的列 前 ...
- mysql 非等值条件 索引_mysql 索引学习--多条件等值查询,顺序不同也能应用联合索引啦...
以前学习这一块的时候,是说:假设建立了联合索引a+b,那么查询语句也一定要是这个顺序才能应用该索引. 那么实际是怎样呢,经过mysql这么多次版本升级,相信mysql已经给我们做了某些优化. 下面是我 ...
- mongodb之索引学习
学习索引分类和创建索引: 1._id索引 大多数集合默认的索引 2.单键索引:手动创建,一个单一的值 3.多建索引:组合函数 4.复合索引 :最左前缀原则 5.过期索引 ...
- mysql教程联合索引_MySQL中的联合索引学习教程
联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支持a | a,b| ...
- sql server 索引学习1
1 什么是聚集和非聚集索引 SQL SERVER提供两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclustered index,也称非聚类索引.非簇 ...
- MySQL之权限索引学习整理
显示本地root用户权限 show grants for root@localhost\G; 显示任意%域用户权限 show grants for root\G; 查询所有用户 select * fr ...
- MySQL的索引学习
文章目录 索引 自动创建索引 手动创建索引 使用索引 单列索引 PRIMARY NORMAL UNIQUE FULLTEXT 组合索引(复合索引/联合索引) 索引不足之处 索引使用注意事项 索引方式 ...
- SQL Server的复合索引学习【转载】
概要什么是单一索引,什么又是复合索引呢? 何时新建复合索引,复合索引又需要注意些什么呢?本篇文章主要是对网上一些讨论的总结. 一.概念 单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上. ...
最新文章
- Smiles2vec | 用于预测化学性质的深度神经网络
- ssms没有弹出服务器验证_Nginx服务器负载均衡及生成ssl密钥对、Nginx配置ssl操作示例...
- iOS核心动画学习整理
- 使用netty实现聊天室功能
- python练习:科赫小雪花包裹
- Velocity教程 (zhuan)
- iOS 开发之几个 Demo 分享网站
- 基于line2d算法的模板匹配
- 水电站计算机监控作用,计算机监控系统在水电站中的应用
- IMDB电影评论文本分类
- geforce experience出现错误尝试重启PC
- 服务器ahci模式安装系统,ahci模式下安装win7系统的方法
- vue与nodejs
- AI Gossip | 八卦人工智能的前世今生
- oracle 抽样_[转载]利用ORACLE实现数据抽样
- FPGA图像处理HLS实现RGB转灰度,提供HLS工程和vivado工程源码
- HDU-2545 树上战争
- AtCoder Beginner Contest 167 F.Bracket Sequencing
- [JVM]了断局: Class文件结构梳理
- 《Web安全之机器学习入门》笔记:第九章 9.4 支持向量机算法SVM 检测DGA域名
热门文章
- Rmarkdown对租房数据进行数据分析(普通画图方法)
- Apollo项目坐标系研究
- 制作自己的Vscode主题插件
- 融云 IM SDK 集成 --- 刷新会话界面和会话列表界面
- cad菜单栏快捷键_天正CAD界面“菜单栏”不见了怎么办?教你3招秒解决,实用神技巧...
- java走向_Java 程序员走向“人生巅峰”的20个建议
- 编写函数prime(n),功能是接收一个正整数,判断是否是素数,若为素数则返回1,否则返回0。
- linux pclint配置_pclint设置 | 学步园
- 在线文档查看方案- 易度云查看
- 转战C#---day1