空白键|我要消灭一半程序员,10大高性能开发宝石( 五 )
位图索引正是基于这一点进行优化 , 针对字段取值只有少量有限项 , 数据表中该列字段出现大量重复时 , 就是位图索引一展身手的时机 。
所谓位图 , 就是Bitmap , 其基本思想是对该字段每一个取值建立一个二进制位图来标记数据表的每一条记录的该列字段是否是对应取值 。
缓存技术&&布隆过滤器
从物理CPU对内存数据的缓存到浏览器对网页内容的缓存 , 缓存技术遍布于计算机世界的每一个角落 。
面对当前出现的数据库瓶颈 , 同样可以用缓存技术来解决 。
每次访问数据库都需要数据库进行查表(当然 , 数据库自身也有优化措施) , 反映到底层就是进行一次或多次的磁盘I/O , 但凡涉及I/O的就会慢下来 。 如果是一些频繁用到但又不会经常变化的数据 , 何不将其缓存在内存中 , 不必每一次都要找数据库要 , 从而减轻对数据库对压力呢?
缓存穿透:缓存设立的目的是为了一定层面上截获到数据库存储层的请求 。 穿透的意思就在于这个截获没有成功 , 请求最终还是去到了数据库 , 缓存没有产生应有的价值 。 缓存击穿:如果把缓存理解成一面挡在数据库面前的墙壁 , 为数据库“抵御”查询请求 , 所谓击穿 , 就是在这面墙壁上打出了一个洞 。 一般发生在某个热点数据缓存到期 , 而此时针对该数据的大量查询请求来临 , 大家一股脑的怼到了数据库 。 缓存雪崩:理解了击穿 , 那雪崩就更好理解了 。 俗话说得好 , 击穿是一个人的雪崩 , 雪崩是一群人的击穿 。 如果缓存这堵墙上处处都是洞 , 那这面墙还如何屹立?吃枣药丸 。关于这三个问题的更详细阐述 , 推荐一篇文章什么是缓存系统的三座大山 。
有了缓存系统 , 我们就可以在向数据库请求之前 , 先询问缓存系统是否有我们需要的数据 , 如果有且满足需要 , 我们就可以省去一次数据库的查询 , 如果没有 , 我们再向数据库请求 。
注意 , 这里有一个关键的问题 , 如何判断我们要的数据是不是在缓存系统中呢?
进一步 , 我们把这个问题抽象出来:如何快速判断一个数据量很大的集合中是否包含我们指定的数据?
因为这个问题有两个关键点:快速、数据量很大 。 树结构首先得排除 , 哈希表倒是可以做到常数阶的性能 , 但数据量大了以后 , 一方面对哈希表的容量要求巨大 , 另一方面如何设计一个好的哈希算法能够做到如此大量数据的哈希映射也是一个难题 。
推荐阅读
- 空白键|日常更新全面屏壁纸
- IT168|消灭挖孔屏!小米真全面屏技术上手
- 恐龙|有这种可能吗?其实外星人就是人类,6500万年前到地球消灭恐龙!
- 空白键|你在你男/女朋友的手机里发现过什么秘密?
- 芯片|中国芯需要多久才能造出来,中间的空白期怎么办?
- 空白键|我用什么品牌手机,跟爱国有什么关系?,请问
- 蜜蜂|1小时就能消灭6万只蜜蜂,却被蜜蜂用物理学反制,它有多惨?
- 空白键|iMatch移动固态硬盘体验,抛弃U盘从它做起,ORICO
- 空白键|CORESET和Search Space基本原理,点点滴滴学5G—一文掌握NR
- 空白键|redis学习第一篇