mongodb如何根据字段(数组类型)的长度排序_大数据存储技术选型(七)——MongoDB设计模式及索引优化...

ebade49286c13a733e9a5b19cb9d20f7.png

关系数据库的时代

关系数据库的设计理念

假设你有一台车,你需要给它存起来,给它找个停车位。传统数据库的存储方式就相当于,把这个车的所有零件拆下来,放在存放对应零件的盒子里,需要用的时候,再把他们取出来组装。这种方式的存储数据一个最显而易见的好处就是节省空间~

4158807167a9b0d6b2f31899e7ec8370.png
关系型数据库存储数据

MongoDB的设计理念

然而,MongoDB存储数据的方式则截然不同。同样是上面的停车的例子,这回需要停这辆车的时候,我们就直接把它怼进车库里,取的时候直接就开走了。这样的存储数据的方式的好处是方便随时快捷地存取,但是会牺牲一些存储空间。

b3bbfe9de2e8ef3b5eb7d4807d8dcd38.png
MongoDB的存储理念

索引原理

在MongoDB中主要有五种类型的索引,即单字段索引(Single-field Indexes)、复合索引(Compound Indexes)、多键索引(Multikey Indexes)、地理位置索引(Geospatial Indexes)和全文索引(Text Indexes)。

数据结构与算法复习

由于B树/B+树的工作过程过于复杂,我们用数组来理解它。假设索引为{a:1}(aASC):

db.table.insert({a: 1}) [1]

db.table.insert({a: 10}) [1, 10]

db.table.insert({a: 5}) [1, 5, 10]

db.table.insert({a: 7}) [1, 5, 7, 10]

db.table.insert({a: 3}) [1, 3, 5, 7, 10]

如上面工作过程所示,

1、数据增加/删除时始终保持被索引字段有序

2、数组插入效率太低,但B树可以轻(fu)松(za)实现

3、在有序结构上实施二分查找,可实现O(log2(n))高效搜索

1a75ca9a245ecafa028d71fcf5e11bbe.png
Big O Notation——大O符号

理解复合索引

假设索引为{a: 1, b: 1} (a ASC, b ASC):

db.table.insert({a: 1, b: 1}) [{a: 1, b: [1]}]

db.table.insert({a: 1, b: 10}) [{a: 1, b: [1, 10]}]

db.table.insert({a: 5, b: 10}) [{a: 1, b: [1, 10]}, {a: 5, b: [10]}]

db.table.insert({a: 5, b: 7}) [{a: 1, b: [1, 10]}, {a: 5, b: [7, 10]}]

复合索引的创建就是这样一种层层嵌套的方式去建立的。

我们查询数据的时候,也是在各个对应的层级中找到索引所对应的数据。

819e9ebeef27a8fe1f655e08933e32e5.png

复合索引的工作模式——过滤

我们通过下面的三张图来了解一下复合索引如何找到相应的数据页吧

a939d9d60f9ef1d2d2ff83b29b456ca1.png

cff18d2827204ac15ccfc4553918becb.png

d15262c1222c723fe027507aabdbe644.png

如上图所示,我们可以查找数据时,就可以在已建好的索引上,通过不同节点的跳转,找到对应的数据页,再而找到对应数据页上的相关数据。

复合索引的工作模式——排序

e166569306fc177c9493ab896300119b.png

224055af6c86fdbb8abe5a635e048fce.png

由此可知,我们选择不同的排序方式,也会造成检索的数据页的范围不一样。

复合索引的工作模式——索引顺序的影响

7566fffa17314658bb83163922b20a4d.png

我们通过不同的检索索引的顺序,对数据进行查询,因为检索跳转的路径不一样,从而造成查询效率不一样。

我们根据不同的索引执行策略,来进行索引的优化,从而提高查询效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

幼小衔接语言教案上c册_关于幼小衔接,这里有你最想要的解答

相信很多家长都会发现,在孩子即将步入小学的前一年或者半年左右,身边同龄的孩子有一部分会放弃大班的学习,转而去幼小衔接班了。就算平时再佛系的妈妈,内心也会焦虑,产生疑问:到底要不要上幼小衔接班&#…

每日一题20180330-Linux

一、问题 1.1 统计/var/log/下所有文件个数 1.2 查找出/var/log目录下面修改时间是7天以前,大小在50k到2M之间,并以.log结尾的文件把这些文件复制到/data目录中 1.3 设置一条Iptables规则,允许192.168.10.0段访问873端口? 二、答案…

前台文件_欧木瑾怎么定制办公前台?

前台是一个反映公司整体形象的地方。这是给客户和商业伙伴留下印象的第一个地方。因此,芜湖绿木家具有限公司欧木瑾小编说公司的前台装修不能马虎。前台的设计风格与材料的使用有很大关系。从细节上看,这是材料的精美运用。这里是如何设计一个好的前台。…

单纯形法只有两个约束条件_10分钟掌握对偶单纯形法

只听名字的话会感觉对偶单纯形法和对偶问题关系很大,其实不然(想要了解对偶问题的话可以看我之前的文章)。对偶单纯形法在我看来和大M法以及两阶段法很像,都是用来补充纯粹的单纯形法无法解决特殊问题的缺陷。而且对偶单纯形法更加“强大”,因…

linix防火墙设置之顺序设置问题 -- 解决防火墙规则顺序和插入规则到指定序号的问题...

转载于百度经验:https://jingyan.baidu.com/article/ae97a646ce58c2bbfd461d90.html 无论是硬件防火墙还是软件防火墙都会有一个规则序列的问题,规则顺序会影响到规则的生效情况,所以这个必须得注意,下面小编与大家分享一下如何注…

Ubuntu安装完后设置root密码

安装完Ubuntu 14.04后默认是没有主动设置root密码的,也就无法进入根用户。 相关阅读: Ubuntu 14.04 下载、安装、配置 整理汇总 页面 http://www.linuxidc.com/Linux/2014-04/100370.htm Windows 7下硬盘安装Ubuntu 14.04永久更新地址: http:…

js 中转换成list集合_程序员:java集合介绍-List,具说很详细,你不来看看?

Java集合介绍作为一个程序猿,Java集合类可以说是我们在工作中运用最多、最频繁的类。相比于数组(Array)来说,集合类的长度可变,更加方便开发。Java集合就像一个容器,可以存储任何类型的数据,也可以结合泛型来存储具体的…

axure实现搜索功能_vue实现模糊搜索功能

首先写好一个列表写好的样式是这样滴操作来了在computed里面定义了一个search函数 使用filter过滤接下来在method 里面写一个sousuo1函数 进行一个判断 如果搜索这个输入框框里是空 就是展示原数据 如果这个不为空 就会展示搜索到的数据最后 很重要把list改为sousuo1()这个函数…

7000更换控制器电源步骤_开关电源控制环路(初级篇:上)

本文是 21Dianyuan 社区原创技术文章,作者 ctus220,感谢作者的辛苦付出。内容目录:1、环路和直流稳压电源的关系2、与环路相关的基本概念波特图,环路稳定性判据,传递函数,零极点3、常用的补偿控制器PI&…

python实现排列组合公式算法_朴素贝叶斯算法的Python实现

朴素贝叶斯分类算法被广泛应用于文本分类场景中、包含垃圾邮件、互联网新闻等分类任务,属于有监督学习算法。它独立考量每一维度特征被分类的条件概率,然后综合这些概率对其所在的特征向量做出分类预测,即“假设各个维度上的特征被分类的条件…

cdr怎么做文字路径_整理128张图片,告诉你文字少的PPT应该怎么做?

点击上方蓝字关注↑,下次看文更方便!微信扫码观看全套Excel、Word、PPT视频作者:自律的音律 来源:自律的音律(ID:yinlvPPT)哈喽,又到周一干货时间。我经常被问到一个问题,PPT 字多的时候&#…

网件rax40可以刷梅林_美国网件发布全系列Wi-Fi6家用无线路由器,部署未来家用产品市场...

5月25日,美国网件在深圳海上世界文化艺术中心发布全线WiFi 6产品,即RAX40、RAX80、RAX120、RAX200四款产品,重新布局WiFi市场,理论速度远远超出大多数家庭互联网连接所能提供的速度。新产品支持下一代Wi-Fi标准——802.11ax&#…

ios 部分string颜色_iOS-代码混淆加固方案

对于iOS来说,由于系统是封闭的,APP上架需要通过App Store,安全性来说相当高。但是对于大厂和知名APP而言,别人给的安全保障永远没有自己做的来得踏实。所以对于大厂、少部分企业级和金融支付类应用来说加固是相当重要的。下面是目…

Python入门基础之迭代和列表生成式

什么是迭代 在Python中,如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration)。 在Python中,迭代是通过 for ... in 来完成的,而很多语言比如C或…

安川最小巧机器人_2020工博会,安川展品前瞻(机器人篇)

~基于YASKAWA(安川)核心产品和i-Mechatronics(i立方-机电一体化)概念,实现客户的生产改革~这次的中国国际工业博览会安川将展出至今为止最多的演示机数量。•提供现在重点关注的智能制造、半导体、汽车制造个性化解决方案•提供适用于所有生产…

如何调度spark程序_如何定时,周期性的运行程序?Python APScheduler实现任务灵活调度...

在我们的开发工作中,时常会有这样的开发需求,如需要定时或者周期性的运行某些程序,因此经常用到一些定时服务,如在 Linux系统中使用 Crond 服务实现程序的定时运行。在 Python中也有这样的一个模块,那就是 APScheduler…

redis实现轮询算法_【07期】Redis中是如何实现分布式锁的?

点击上方“Java面试题精选”,关注公众号面试刷图,查缺补漏分布式锁常见的三种实现方式:数据库乐观锁;基于Redis的分布式锁;基于ZooKeeper的分布式锁。本地面试考点是,你对Redis使用熟悉吗?Redis…

前端radio单选框默认选中_开发记录篇前端内容1

有段时间没有更新文章了,因为是用的公司电脑,没有虚拟机,所以就没法演示hadoop相关的东西了,而且大数据篇的东西需要花费一些时间和精力去收集整理内容,那大数据篇就先暂停一下。最近这段时间的话我可能会更新一些开发…

专属海报小程序_剑3泡泡 | 小程序给你一份专属的账号海报!

01按照惯例,这里是简介paopaods.com本期推送的是:如何正确的使用小程序每个账号均可小程序【剑3泡泡】搜到,生成专属账号海报!点击底部【点我卖号】即可拥有!02教程开始之前,安利paopaods.com泡泡家定金调整…

td不允许自己扩展_V神原文详解:通过及时性检测器(TD)解决区块链的51%攻击问题...

注:原文作者是以太坊联合创始人Vitalik Buterin,在这篇文章中,他提出了一种称为及时性检测器(TD)的构造,以试图解决区块链51%攻击的问题。(图:Vitalik Buterin)以下为译文:摘要我提出了一种基于Lamport 99%…