SequoiaDB巨杉数据库_SequoiaDB
SequoiaDB巨杉数据库_下载

文档

安装

基本操作

数据模型

系统架构

数据库管理

连接器

驱动

参考手册

版本信息

帮助

  • 内容
  • 评论
  • 修订记录

索引

概念

在 SequoiaDB 数据库中,索引是一种特殊的数据对象。索引本身不做为保存用户数据的容器,而是作为一种特殊的元数据,提高数据访问的效率。

每一个索引必须建立在一个集合之中,一个集合最多可以拥有64个索引。

索引可以被认为是将数据按照某一个或多个给定的字段进行排序,从而在其中快速搜索到用户指定查询条件的方式。

在SequoiaDB 中,索引使用 B 树或LSM树(社区版)结构。

一个典型的索引结构如图1所示:

图1

图1

图中左边的方形为数据,右边的三角形为索引。索引按照从小到大的树形结构排列,每条索引记录分别指向一条记录文档。

通过进行树形遍历,对于查找某个特定数值的操作,可以使用树遍历在索引中快速定位其所需的数据。

一个典型的btree索引结构如图2所示:

图2

图2

图中方形为btree的结点。索引纪录从小到大排列在结点中,每个结点的纪录值范围由其父结点决定。

一个典型的LSM树索引结构如图3所示:

图3

图3

图中三角形为索引。C0树置于内存,往后的LSM树置于硬盘。索引纪录会先进入C0树,通过Merge过程,纪录被逐渐合并到靠后的LSM树中。

基于LSM树索引的结构,其适用于插入频率远大于查询频率的应用场景。

SequoiaDB 可以对任意数据类型进行索引,每一个索引包含几个属性:

属性 描述
name 索引名,同一个集合中的索引名必须唯一。
key 索引键,为一个 JSON 结构,包含一个或多个指定索引字段与方向的字段。其中方向为1代表从小到大排序,-1则为从大到小排序。
unique 索引是否唯一,可选参数,默认 false。设置为 true 时代表该索引为唯一索引。在唯一索引所指定的索引键字段上,集合中不可存在一条以上的记录完全重复。
enforced 索引是否强制唯一,可选参数,在 unique 为 true 时生效,默认 false。设置为 true 时代表该索引在 unique 为 true 的前提下,不可存在一个以上全空的索引键。

在 SequoiaDB 中,所有集合均包含一个名为“$id”的强制唯一索引。该索引包含一个“_id”字段的索引键。

所有的分区集合在创建时均会自动生成一个额外的“$shard”索引,索引键为用户指定的分区键字段。

Note:

在分区集合中,所有的唯一索引必须包含集合分区键中所指定的全部字段。

分区集合中,“$id”索引仅保证单节点内记录的唯一性。如果用户希望指定全局唯一的字段,需要额外创建唯一索引,且该索引必须包含集合分区键中所指定的全部字段。

当使用LSM树索引,遇到磁盘满的错误时,需清除出足够空间后重启数据库,数据库方可恢复正常使用。

格式

索引的定义格式必须包含 name 与 key 两个字段。其中 name 的值必须为字符串,key 则为一个 JSON 对象。

{ "name" : "<索引名>", "key" : { "<索引字段1>" : <1|-1>, [ "<索引字段2>" : <1|-1> ...] }, [ "unique" : <true|false> ], [ "enforced" : <true|false> ]}

key 的对象必须包含至少一个字段,其中字段名为用户需要索引的字段名,数值为1或者-1。其中1代表数据在索引中的排列顺序由小至大,-1则代表由大至小。

示例

  • 非唯一索引,索引名“employee_id_key”,索引字段为正向“employee_id”

    { "name" : "employee_id_key", "key" : {"employee_id" : 1 } }
  • 唯一索引,索引名为“record_id_index”,索引字段为正向“product_key”与逆向“record_key”

    { "name" : "record_id_index", "key" : { "product_key" : 1, "record_key" : -1 }, "unique" : true }

    在该索引中,不可存在两条记录拥有同样的 product_key 与 record_key(如果仅 product_key 相同,或者仅 record_key 相同则可以通过唯一判定)

  • 强制唯一索引,索引名为“测试索引”,索引字段为正向“测试用例名称”

    { "name" : "测试索引", "key" : { "测试用例名称" : 1 }, "unique" : true, "enforced" : true }

    在强制唯一索引中,所有记录必须遵循唯一索引规则,且不可存在一条以上的数据在“测试用例名称”字段为空。

请登陆后再发表评论
最新评论
更新日志
  • 2016-10-11

回到顶部
公司简介
广州巨杉软件开发有限公司(SequoiaDB巨杉数据库),专注新一代大数据基础架构研发,是国内领先的新一代分布式数据库厂商。公司获评硅谷最具影响力创新商业媒体《红鲱鱼》评选的“全球创新企业100强”,并连续两年入选美国知名科技媒体《快公司》评选的“中国50大创新公司”榜单。目前已拥有客户包括多家世界500强企业以及著名IT互联网公司。
官方微信

官方微信

SequoiaDB

商务与技术支持

sales_support@sequoiadb.com

联系邮箱

contact@sequoiadb.com

400-8038-339

粤ICP备16118040号     广州巨杉软件开发有限公司(巨杉数据库) 版权所有