浅谈搜索引擎和传统数据库(ES,solr)

        作为小白一枚,一直不理解既然已经有数据库存储的数据了,为什么还要有搜索引擎这些东西,而且这些搜索引擎和数据库之间是怎样的联系或者协同工作的。最近研究了很多,慢慢的好像理解了其中意思了,所以在此分享,也有可能是我理解错了,欢迎各位大神指正。

         ES(ElasticSearch)是一款分布式全文检索框架,底层基于基于Lucene实现。

         Elasticsearch是提供持久存储、统计等多项功能的现代搜索引擎。

         首先,ES更多是面向搜索的,而database是面向数据存储的,查询其次。

         其次,SQL数据库和ES存储,需要根据数据的组成、数据库选择对应的同步插件,使得两存储之间实时同步。

         举个例子,ES搜索引擎。

         ES与传统数据的区别主要有:

        1.结构名称不同

           一个ES集群可以包含多个索引(数据库),每个索引又包含了很多类型(表),类型中包含了很多文档(行),每个文档使用 JSON 格式存储数据,包含了很多字段(列)。

关系型数据库

数据库

ElasticSearch

索引

类型

文档

字段

        2.ES分布式搜索,传统数据库遍历式搜索

           ES支持分片和复制,从而方便水平分割和扩展,复制保证了es的高可用与高吞吐。

           在ES中,当你创建一个索引(数据库)的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的索引(数据库),索引可以被放置到集群中的任何节点上。分片优点:

          (1).允许你水平分割/扩展你的内容容量

          (2).允许你在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量

          (3).分片的分布,它的文档怎样聚合回搜索请求,完全由Elasticsearch管理

       3.ES采用倒排索引,传统数据库采用B+树索引

          假设一个文档(用id标识)是有许多的单词(用value标识)组成的,每个单词可能同一个文档中重复出现很多次,也可能出现在不同的文档中。

          正排索引:从文档角度看其中的单词,表示每个文档都含有哪些单词,以及每个单词出现了多少次(词频)及其出现位置(相对于文档首部的偏移量)。

          倒排索引:从单词角度看文档,标识每个单词分别在那些文档中出现(文档ID),以及在各自的文档中每个单词分别出现了多少次(词频)及其出现位置(相对于该文档首部的偏移量)。

          简单理解,

          正排索引:id —> value

          倒排索引:value —> id

          ES中为所有字段默认都建了倒排索引。

       4.ES没有用户验证和权限控制

       5.ES没有事务的概念,不支持回滚,误删不能恢复

       6.ES免费,完全开源;传统数据库部分免费

       因为小弟目前的开发只用到了ES,就大体说了下基本概念,不然我怕好多小伙伴和我似的,最开始跟没头的苍蝇一样,不知道怎么入手。文章也没有深入去讲,只是给各位小伙伴一些抽象的理解,来大体了解搜索引擎到底是个什么东东,也或许小弟理解有错误,还望各位大佬多多指正,你们的指正和补充建议,都是小弟我前进的方向和动力。

       后续会慢慢完善ES篇。至于solr,目前还没有接触,只是以前有JAVA组同事使用来着。以后有时间再深入了解吧。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平