国内外个人免费云服务器推荐 liunx服务器搭建与管理( 五 )


有需求就有市场,有市场就会有产品,以memcached和Redis为代表的内存对象缓存系统应运而生 。
缓存系统有三个著名的问题:
缓存穿透: 缓存设立的目的是为了一定层面上截获到数据库存储层的请求 。穿透的意思就在于这个截获没有成功,请求最终还是去到了数据库,缓存没有产生应有的价值 。缓存击穿: 如果把缓存理解成一面挡在数据库面前的墙壁,为数据库“抵御”查询请求,所谓击穿,就是在这面墙壁上打出了一个洞 。一般发生在某个热点数据缓存到期,而此时针对该数据的大量查询请求来临,大家一股脑的怼到了数据库 。缓存雪崩: 理解了击穿,那雪崩就更好理解了 。俗话说得好,击穿是一个人的雪崩,雪崩是一群人的击穿 。如果缓存这堵墙上处处都是洞,那这面墙还如何屹立?吃枣药丸 。关于这三个问题这里不详细讲述 。
有了缓存系统,我们就可以在向数据库请求之前,先询问缓存系统是否有我们需要的数据,如果有且满足需要,我们就可以省去一次数据库的查询,如果没有,我们再向数据库请求 。
注意,这里有一个关键的问题,如何判断我们要的数据是不是在缓存系统中呢?
进一步,我们把这个问题抽象出来:如何快速判断一个数据量很大的集合中是否包含我们指定的数据?
这个时候,就是布隆过滤器大显身手的时候了,它就是为了解决这个问题而诞生的 。那布隆过滤器是如何解决这个问题的呢?
先回到上面的问题中来,这其实是一个查找问题,对于查找问题,最常用的解决方案是搜索树和哈希表两种方案 。
因为这个问题有两个关键点:快速、数据量很大 。树结构首先得排除,哈希表倒是可以做到常数阶的性能,但数据量大了以后,一方面对哈希表的容量要求巨大,另一方面如何设计一个好的哈希算法能够做到如此大量数据的哈希映射也是一个难题 。
对于容量的问题,考虑到只需要判断对象是否存在,而并非拿到对象,我们可以将哈希表的表项大小设置为1个bit,1表示存在,0表示不存在,这样大大缩小哈希表的容量 。
而对于哈希算法的问题,如果我们对哈希算法要求低一些,那哈希碰撞的机率就会增加 。那一个哈希算法容易冲突,那就多弄几个,多个哈希函数同时冲突的概率就小的多 。
布隆过滤器就是基于这样的设计思路:
当设置对应的key-value时,按照一组哈希算法的计算,将对应比特位置1 。
但当对应的key-value删除时,却不能将对应的比特位置0,因为保不准其他某个key的某个哈希算法也映射到了同一个位置 。
也正是因为这样,引出了布隆过滤器的另外一个重要特点:布隆过滤器判定存在的实际上不一定存在,但判定不存在的则一定不存在 。
你们公司网站的内容越来越多了,用户对于快速全站搜索的需求日益强烈 。这个时候,你需要:
全文搜索技术对于一些简单的查询需求,传统的关系型数据库尚且可以应付 。但搜索需求一旦变得复杂起来,比如根据文章内容关键字、多个搜索条件但逻辑组合等情况下,数据库就捉襟见肘了,这个时候就需要单独的索引系统来进行支持 。
如今行业内广泛使用的ElasticSearch(简称ES)就是一套强大的搜索引擎 。集全文检索、数据分析、分布式部署等优点于一身,成为企业级搜索技术的首选 。
ES使用RESTful接口,使用JSON作为数据传输格式,支持多种查询匹配,为各主流语言都提供了SDK,易于上手 。
另外,ES常常和另外两个开源软件Logstash、Kibana一起,形成一套日志收集、分析、展示的完整解决方案:ELK架构 。


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: