数据库搜索引擎介绍

这篇具有很好参考价值的文章主要介绍了数据库搜索引擎介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、 索引

1.1 、索引的定义及优缺点

索引的定义:索引是对数据库表的一列或者多列的值进行排序一种结构,使用索引可以快速访问数据表中的特定信息。

通俗来讲,索引就是数据库表的一个目录,通过索引,我们可以迅速的找到数据库中的数据,并进行相应的增删改查等操作。

索引的使用大大加快数据检索的速度,将随机I/O变成顺序I/O(因为B+树的叶子节点是连接在一起的),加速表与表之间的连接,使得我们查询数据更为方便,因此我们在执行数据库查询时,基本离不开索引,但与此同时,他也有一定缺点,从空间角度考虑,建立索引需要占用物理空间,其会占用计算机的内存,因而我们在数据库优化时会尽量减少索引的建立;从时间角度考虑,创建和维护索引都需要花费时间,例如对数据进行增删改的时候都需要维护索引,因此在创建索引时,我们应当要注意不能创建太多索引。

1.2 索引的数据结构

索引的数据结构主要有B+树和哈希表,对应的索引分别为B+树索引和哈希索引。InnoDB引擎的索引类型有B+树索引和哈希索引,默认的索引类型为B+树索引。一般来说,我们在查询时更多的是用B+数,其原因是其查找的效率非常高,并且支持排序和范围查找;哈希索引一般多用于精确的等值查找。

MySQL主要的索引类型主要有FULLTEXT,HASH,BTREE,RTREE。

FULLTEXT:FULLTEXT即全文索引,MyISAM存储引擎和InnoDB存储引擎在MySQL5.6.4以上版本支持全文索引,一般用于查找文本中的关键字,而不是直接比较是否相等,多在CHAR,VARCHAR,TAXT等数据类型上创建全文索引。全文索引主要是用来解决WHERE name LIKE "%zhang%"等针对文本的模糊查询效率低的问题。

HASH:HASH即哈希索引,哈希索引多用于等值查询,时间复杂夫为o(1),效率非常高,但不支持排序、范围查询及模糊查询等。

BTREE:BTREE即B+树索引,INnoDB存储引擎默认的索引,支持排序、分组、范围查询、模糊查询等,并且性能稳定。

RTREE:RTREE即空间数据索引,多用于地理数据的存储,相比于其他索引,空间数据索引的优势在于范围查找

1.1.3、索引的分类

       1、唯一索引: 是在表上一个或者多个字段组合建立的索引,这个或者这些字段的值组合起来在表中不可以重复。

  2、非唯一索引: 是在表上一个或者多个字段组合建立的索引,这个或者这些字段的值组合起来在表中可以重复,不要求唯一。

  3、主键索引(主索引): 是唯一索引的特定类型。表中创建主键时自动创建的索引,一个表只能建立一个主索引。

  4、聚集索引(聚簇索引、Innodb):表中记录的物理顺序与键值的索引顺序相同。 因为真实数据的物理顺序只有一种,所以一个表只能有一个聚集索引。叶子节点(B+树)存储真实的数据行,不再有另外单独的数据页。

  5、非聚集索引(Mylsam):表中记录的物理顺序与键值的索引顺序不同。这也是非聚集索引与聚集索引的根本区别。叶子节点并非数据节点,而是每一个指向真正数据行的指针。

  

聚簇索引和非聚簇索引最主要的区别是数据和索引是否分开存储

  • 聚簇索引:将数据和索引放到一起存储,索引结构的叶子节点保留了数据行。
  • 非聚簇索引:将数据进和索引分开存储,索引叶子节点存储的是指向数据行的地址。

2 数据库引擎

2.1 数据库引擎的定义及理解

数据库引擎简单来说就是一个"数据库发动机"。当你访问数据库时,不管是手工访问,还是程序访问,都不是直接读写数据库文件,而是 通过数据库引擎去访问数据库文件。以关系型数据库为例,你发SQL语句给数据库引擎, 数据库引擎解释SQL语句,提取出你需要的数据返回给你。因此,对访问者来说,数据库引擎就是SQL语句的解释器。正式来说,数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可以 控制访问权限并快速处理事务,从而满足企业内大多数需要 处理大量数据的应用程序的要求,这包括 创建用于存储数据的表和用于查看、管理和保护数据安全的数据库对象(如索引、视图和存储过程)

 参见blog:(176条消息) 数据库引擎学习总结_gentelyang的博客-CSDN博客_数据库引擎

2.2、数据库引擎的任务

1:设计并创建数据库以保存系统所需要的关系或xml文档

2:实现系统以访问或更改数据库中存储的数据,实现网站或使用数据的应用程序,包括使用SOL Server工具和使用工具已使用数据的过程。

3:为单位或用户部署实现的系统

4:提供日常管理支持优化数据库的性能。

2.3、引擎的类别

常见的数据库引擎类别包括ISAM、MYISAM,HEAP和INNODB,其是mysql数据库的有机组成部分,在数据查询中起到了非常重要的作用。其详细介绍如下:

ISAM
ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MySQL能够支持这样的备份应用程序。

MyISAM
MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作。其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMChk工具和用来恢复浪费空间的MyISAMPack工具。

HEAP
HEAP允许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAM和MyISAM都快,但是它所管理的数据是不稳定的,而且如果在关机之前没有进行保存,那么所有的数据都会丢失。在数据行被删除的时候,HEAP也不会浪费大量的空间。HEAP表格在你需要使用SELECT表达式来选择和操控数据的时候非常有用。要记住,在用完表格之后就删除表格。让我再重复一遍:在你用完表格之后,不要忘记删除表格。

InnoDB和Berkley DB
InnoDB和Berkley DB(BDB)数据库引擎都是造就MySQL灵活性的技术的直接产品,这项技术就是MySQL++ API。在使用MySQL的时候,你所面对的每一个挑战几乎都源于ISAM和MyISAM数据库引擎不支持事务处理也不支持外来键。尽管要比ISAM和MyISAM引擎慢很多,但是InnoDB和BDB包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。如前所述,如果你的设计需要这些特性中的一者或者两者,那你就要被迫使用后两个引擎中的一个了。

2.4、InnoDB引擎和MyISAM引擎的区别

在InnoDB存储引擎中,默认的索引为B+树索引,利用主键创建的索引为主索引,也是聚簇索引,在主索引之上创建的索引为辅助索引,也是非聚簇索引。为什么说辅助索引是在主索引之上创建的呢,因为辅助索引中的叶子节点存储的是主键。

数据库搜索引擎介绍

在MyISAM存储引擎中,默认的索引也是B+树索引,但主索引和辅助索引都是非聚簇索引,也就是说索引结构的叶子节点存储的都是一个指向数据行的地址。并且使用辅助索引检索无需访问主键的索引。

数据库搜索引擎介绍

3 数据库事务

3.1、事务的四大特性

原子性:事务是最小的执行单位,要么全部执行,要么全部不执行

一致性:执行事务前后,数据保持一致,多个事务读取的结果是相同的

隔离性:并发访问数据时,一个用户事务不会被其他事务所干扰

持久性:事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。


3.2 事务的隔离级别

事务的隔离级别共有四种,包括读未提交、读以提交、可重复读、可序列化,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。

Read uncommitted 读未提交:事务B读取了事务A尚未提交的数据,可能出现脏读

Read committed 读提交:事务A事先读取了数据,事务B紧接了更新了数据,并提交了事务,而事务A再次读取该数据时,数据已经发生了改变,避免了脏读,但是可能会造成不可重复读

Repeatable read 重复读: ,避免了不可重复读,但还有可能出现幻读。注:MySQL的默认隔离级别就是Repeatable read。

Serializable 序列化:Serializable是最高的事务隔离级别,同时代价也花费最高,性能很低,一般很少使用,在该级别下,事务顺序执行,不仅可以避免脏读、不可重复读,还避免了幻像读。

1.3.3、重复读与幻读

重复读是为了保证在一个事务中,相同查询条件下读取的数据值不发生改变,但是不能保证下次同样条件查询,结果记录数不会增加。

幻读就是为了解决这个问题而存在的,他将这个查询范围都加锁了,所以就不能再往这个范围内插入数据,这就是SERIALIZABLE 隔离级别做的事情。

4 、索引,引擎和事务的联系

4.1 三者的关系

通俗来说,索引是数据库查询,编写数据的一个目录,引擎可以说是数据库与外界交互的一个工具,而事务则是决定数据库与外界业务交付的最小单位。通过对于数据库索引,引擎以及事务的认识,我们才能更清楚了解和掌握数据库是如何使用的。也可以通过此来了解和掌握mysql以及和mysqls数据库相关的事务,也能更清楚如何对sql语句进行优化以及优化数据库表。

4.2.mysql中的数据库索引以及引擎

MySQL主要的索引类型主要有FULLTEXT,HASH,BTREE,RTREE。分别是全文索引,哈希索引,B+树索引,以及即空间数据索引,他们共同构成了数据库的INnoDB,MYISAM以及HEAP等基本存储引擎和查找引擎,也使得数据库有众多功能,可以支持排序、分组、范围查询、模糊查询等操作,使得数据可以发挥其生产力。

而其与外界交互的sql语句则共同组成了一个个事务,使得数据的操作成为一个个完整的事件,从而能够通过组合来反映我们世界的变化,从而助力与我们生活中的方方面面,发挥其独特的功能。比如通过mysql中表格数据的不同查询条件,我们可以得出和筛选出不同人的得分情况,从而

4.3 其他数据库的设计以及思考

4.3 .1 Oracle数据库的引擎

oracle中不存在引擎的概念,数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

OLTP和OLAP的区别

OLTP 系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作;
OLAP 系统则强调数据分析,强调SQL执行市场,强调磁盘I/O,强调分区等。 

数据库搜索引擎介绍

 

参见blog:https://blog.csdn.net/cafucwxy/article/details/78319414

4.3.2 Sqlite数据库设计

sqlite数据库设计是以零配置而生效的,具有可兼得性,

4.3.3 redis数据库

4.3.4 mongoDB

4.3.5 hBase数据库

5.数据库优化策略

1、索引优化

2、分库分表

3、其他


参考资料:https://blog.csdn.net/lydon1314/article/details/121479989文章来源地址https://www.toymoban.com/news/detail-437660.html

到了这里,关于数据库搜索引擎介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 构建搜索引擎,而非向量数据库(Vector DB) [译]

    作者: Panda Smith 在过去 12 个月中,我们见证了向量数据库(Vector DB)创业公司的迅猛增长。我此刻并不打算深入探讨它们各自的设计取舍。相反,我更想探讨和解释一些关于向量数据库的常见理解——它是什么、它的功能用途,以及在解决问题时,我们应如何恰当地利用向

    2024年02月04日
    浏览(48)
  • jieba 加whooh 构建自己本地数据库的搜索引擎

    例子 实战

    2024年02月10日
    浏览(41)
  • 6月《中国数据库行业分析报告》已发布,首发空间、搜索引擎数据库【全球产业图谱】

    为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况,从2022年4月起,墨天轮社区行业分析研究团队出品将持续每月为大家推出最新《中国数据库行业分析报告》, 持续传播数据技术知识、努力促进技术创新与行业生态发展 ,目前已更

    2024年02月13日
    浏览(56)
  • 从零开始构建基于milvus向量数据库的文本搜索引擎

    在这篇文章中,我们将手动构建一个语义相似性搜索引擎,该引擎将单个论文作为“查询”输入,并查找Top-K的最类似论文。主要包括以下内容: 1.搭建milvus矢量数据库 2.使用MILVUS矢量数据库搭建语义相似性搜索引擎 3.从Kaggle下载ARXIV数据,使用dask将数据加载到Python中,并构

    2024年02月09日
    浏览(66)
  • 分布式数据库系统:如何利用HBase构建微博搜索引擎?

    作者:禅与计算机程序设计艺术 随着互联网的蓬勃发展,用户数量和社交活动呈爆炸式增长。因此,基于互联网的新型应用正在崭露头角,例如新浪微博、微信朋友圈、QQ空间、知乎、搜狐新闻等。这些网站拥有庞大的用户群体,每天产生海量的数据,极大的 challenges 要如何

    2024年02月04日
    浏览(60)
  • 【Golang星辰图】数据管理利器:Go编程语言中的数据库和搜索引擎综合指南

    Go编程语言是一种强大、类型安全且高效的编程语言,它在处理数据库和搜索引擎方面有着广泛的应用。本篇文章将详细介绍几个Go编程语言中常用的数据库和全文搜索引擎,包括Go-bleve、Go-pgx、Go-leveldb/leveldb、Go-xorm、Go-mysql-driver和Go-bbolt/bbolt。对于每个工具,我们将介绍其功

    2024年03月26日
    浏览(72)
  • 《Spring Boot 实战派》--13.集成NoSQL数据库,实现Elasticsearch和Solr搜索引擎

             关于搜索引擎 我们很难实现 Elasticseach 和 Solr两大搜索框架的效果;所以本章针对两大搜索框架,非常详细地讲解 它们的原理和具体使用方法, 首先 介绍什么是搜索引擎 、如何用 MySQL实现简单的搜索引擎,以及Elasticseach 的 概念和接口类; 然后介绍Elasticseach

    2023年04月09日
    浏览(91)
  • 搜索引擎:常用信息检索方式介绍与倒排索引实现(Python)

    (1)线性扫描 计算机对于文档内容检索有多种可能的方式,如直接从头遍历至尾端,根据我们输入的提取内容。 这类检索方式与我们人类阅读的习惯相同,因此实现简单且很容易被接受。 若问你《三国演义》中是否存在’舌战群儒’这一词语,我们常常会选择浏览全文

    2024年02月08日
    浏览(43)
  • Java SpringBoot API 实现ES(Elasticsearch)搜索引擎的一系列操作(超详细)(模拟数据库操作)

    小编使用的是elasticsearch-7.3.2 基础说明: 启动:进入elasticsearch-7.3.2/bin目录,双击elasticsearch.bat进行启动,当出现一下界面说明,启动成功。也可以访问http://localhost:9200/ 启动ES管理:进入elasticsearch-head-master文件夹,然后进入cmd命令界面,输入npm run start 即可启动。访问http

    2024年02月04日
    浏览(57)
  • 火山引擎云搜索服务升级云原生新架构;提供数十亿级分布式向量数据库能力

    从互联网发展伊始,搜索技术就绽放出了惊人的社会和经济价值。随着信息社会快速发展,数据呈爆炸式增长,搜索技术通过数据收集与处理,满足信息共享与快速检索的需求。 云搜索服务 ESCloud 是火山引擎提供的 完全托管在线分布式搜索服务 ,兼容 Elasticsearch、Kibana 等软

    2024年02月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包