0592 网站建设,模板网站建设+百度,大气有格局的公司名字,影楼风关系数据库的时代关系数据库的设计理念假设你有一台车#xff0c;你需要给它存起来#xff0c;给它找个停车位。传统数据库的存储方式就相当于#xff0c;把这个车的所有零件拆下来#xff0c;放在存放对应零件的盒子里#xff0c;需要用的时候#xff0c;再把他们取出来…关系数据库的时代关系数据库的设计理念假设你有一台车你需要给它存起来给它找个停车位。传统数据库的存储方式就相当于把这个车的所有零件拆下来放在存放对应零件的盒子里需要用的时候再把他们取出来组装。这种方式的存储数据一个最显而易见的好处就是节省空间关系型数据库存储数据MongoDB的设计理念然而MongoDB存储数据的方式则截然不同。同样是上面的停车的例子这回需要停这辆车的时候我们就直接把它怼进车库里取的时候直接就开走了。这样的存储数据的方式的好处是方便随时快捷地存取但是会牺牲一些存储空间。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))高效搜索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]}]复合索引的创建就是这样一种层层嵌套的方式去建立的。我们查询数据的时候也是在各个对应的层级中找到索引所对应的数据。复合索引的工作模式——过滤我们通过下面的三张图来了解一下复合索引如何找到相应的数据页吧如上图所示我们可以查找数据时就可以在已建好的索引上通过不同节点的跳转找到对应的数据页再而找到对应数据页上的相关数据。复合索引的工作模式——排序由此可知我们选择不同的排序方式也会造成检索的数据页的范围不一样。复合索引的工作模式——索引顺序的影响我们通过不同的检索索引的顺序对数据进行查询因为检索跳转的路径不一样从而造成查询效率不一样。我们根据不同的索引执行策略来进行索引的优化从而提高查询效率。