精华内容
下载资源
问答
  • 注意:Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才,如果是集群就没有数据库的概念。 Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存储数据的字典,...

    注意:Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念。

    Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。这与我们熟知的在一个关系数据库实例中可以创建多个数据库类似,所以可以将其中的每个字典都理解成一个独立的数据库。

    每个数据库对外都是一个从0开始的递增数字命名,Redis默认支持16个数据库(可以通过配置文件支持更多,无上限),可以通过配置databases来修改这一数字。客户端与Redis建立连接后会自动选择0号数据库,不过可以随时使用SELECT命令更换数据库,如要选择1号数据库:

    redis> SELECT 1
    OK
    redis [1] > GET foo
    (nil)

    然而这些以数字命名的数据库又与我们理解的数据库有所区别。首先Redis不支持自定义数据库的名字,每个数据库都以编号命名,开发者必须自己记录哪些数据库存储了哪些数据。另外Redis也不支持为每个数据库设置不同的访问密码,所以一个客户端要么可以访问全部数据库,要么连一个数据库也没有权限访问。最重要的一点是多个数据库之间并不是完全隔离的,比如FLUSHALL命令可以清空一个Redis实例中所有数据库中的数据。综上所述,这些数据库更像是一种命名空间,而不适宜存储不同应用程序的数据。比如可以使用0号数据库存储某个应用生产环境中的数据,使用1号数据库存储测试环境中的数据,但不适宜使用0号数据库存储A应用的数据而使用1号数据库B应用的数据,不同的应用应该使用不同的Redis实例存储数据。由于Redis非常轻量级,一个空Redis实例占用的内在只有1M左右,所以不用担心多个Redis实例会额外占用很多内存。 

    展开全文
  • 作者:兜里辣条来源:segmentfault.com/a/1190000018153249说在前面数据库超级重要,这个大家应该清楚,学过数据库的朋友一定知道,数据库在使用时,即使没...

    作者:兜里有辣条

    来源:segmentfault.com/a/1190000018153249

     说在前面 

    数据库超级重要,这个大家应该清楚,学过数据库的朋友一定知道,数据库在使用时,即使没有加索引也可以运行,但是所有学习数据库的资料、教程,一定会有大量的篇幅在介绍数据库索引,各种后端开发工作的面试也一定绕不开索引,甚至可以说数据库索引是从后端初级开发跨越到高级开发的屠龙宝刀,那么索引到底在服务端程序中起着怎样的作用呢?


     到底什么是索引? 

    用一句话来描述:数据库索引就是一种加快海量数据查询的关键技术。现在还不理解这句话?不要紧,往下看,20分钟以后你就能自己做出这样的总结来了。

    首先给大家看一张图片

    这本书大家一定都很熟悉,小学入门第一课一定就是教小朋友们学习如何使用这本书。那这和我们的数据库索引有啥关系呢?别着急,我们翻开第一页看看。

    注意右上角的那一排文字,其实目录就是传说中的索引!从前面的“一句话描述”我们可以知道,索引的目的就是为了加快数据查询。那么我们查字典时翻的第一个地方是哪里呢,我相信大部分人都会先翻到拼音目录,毕竟现在很多人都是提笔忘字了????。

    数据库索引的作用和拼音目录是一样的,就是最快速的锁定目标数据所在的位置范围。比如我们在这里要查 这个字,那么我们找到了Xx部分之后就能按顺序找到xian这个拼音所在的页码,根据前后的页码我们可以知道这个字一定是在519页到523页之间的,范围一下子就缩小到只有4页了。这相比我们从头翻到尾可是快多了,这时候就出现了第一个专业术语——全表扫描,也就是我们说的从头找到尾了。

    果然,我们在第521页找到了我们要找的“险”字。

    那么现在我们就知道数据库索引大概是一个什么东西了:数据库索引是一个类似于目录这样的用来加快数据查询的技术。


     什么是联合索引? 

    相信大家都见过一些包含多个字段的数据库索引,比如 INDEX idx_test(col_a,col_b)。这种包含多个字段的索引就被称为“联合索引”。那么在多个字段上建索引能起到什么样的作用呢?下面还是以新华字典为例,来看看到底什么是联合索引。

    新华字典里还有一种目录被称为“部首目录”,下面可以看到,要使用这个目录我们首先会根据部首的笔画数找到对应该能的部分,然后可以在里面找到我们想找的部首。比如如果我们还是要找 字所在的位置:

    找到部首后,右边的页码还不是 字真正的页码,我们还需要根据右边的页码找到对应部首在检字表中的位置。找到第93页的检字表后我们就可以根据 余下的笔画数(7画)在“6-8画”这一部分里找到 字真正的页码了。

    在这个过程中,我们按顺序使用了“两个目录”,一个叫做“部首目录”,一个叫做“检字表”。并且我们可以看到上图中检字表的内容都是按部首分门别类组织的。这两个部分合在一起就是我们在本节讨论的主题——联合索引。即通过第一个字段的值(部首)在第一级索引中找到对应的第二级索引位置(检字表页码),然后在第二级索引中根据第二个字段的值(笔画)找到符合条件的数据所在的位置(险字的真正页码)。


     最左前缀匹配 

    从前面使用部首目录的例子中可以看出,如果我们不知道一个字的部首是什么的话,那基本是没办法使用这个目录的。这说明仅仅通过笔画数(第二个字段)是没办法使用部首目录的。

    这就引申出了联合索引的一个规则:联合索引中的字段,只有某个字段(笔画)左边的所有字段(部首)都被使用了,才能使用该字段上的索引。例如,有索引 INDEX idx_i1(col_a,col_b),如果查询条件为 wherecol_b=1,则无法使用索引 idx_i1

    但是如果我们知道部首但是不知道笔画数,比如不知道“横折竖弯勾”是算一笔还是两笔,那我们仍然可以使用“部首目录”部分的内容,只是要把“检字表”对应部首里的所有字都看一遍就能找到我们要找的字了。

    这就引申出了联合索引的另一个规则:联合索引中的字段,即使某个字段(部首)右边的其他字段(笔画)没有被使用,该字段之前(含)的所有字段仍然可以正常使用索引。例如,有索引 INDEX idx_i2(col_a,col_b,col_c),则查询条件 wherecol_a=1andcol_b=2在字段 col_acol_b上仍然可以走索引。

    但是,如果我们在确定部首后,不知道一个字到底是两画还是三画,这种情况下我们只需要在对应部首的两画和三画部分中找就可以了,也就是说我们仍然使用了检字表中的内容。所以,使用范围条件查询时也是可以使用索引的。

    最后,我们可以完整地表述一下最左前缀匹配原则的含义:对于一个联合索引,如果有一个SQL查询语句需要执行,则只有从索引最左边的第一个字段开始到SQL语句查询条件中不包含的字段(不含)或范围条件字段(含)为止的部分才会使用索引进行加速。


     什么是聚集索引? 

    从上文的部首目录和拼音目录同时存在但是实际的字典内容只有一份这一点上可以看出,在数据库中一张表上是可以有多个索引的。那么不同的索引之间有什么区别呢?

    我们在新华字典的侧面可以看到一个V字形的一个个黑色小方块,有很多人都会在侧面写上 A, B, C, D这样对应的拼音字母。因为字典中所有的字都是按照拼音顺序排列的,有时候直接使用首字母翻开对应的部分查也很快。

    像拼音目录这样的索引,数据会根据索引中的顺序进行排列和组织的,这样的索引就被称为聚集索引,而非聚集索引就是其他的一般索引。因为数据只能按照一种规则排序,所以一张表至多有一个聚集索引,但可以有多个非聚集索引。

    在 MySQL数据库的 InnoDB存储引擎中,主键索引就是聚集索引,所有数据都会按照主键索引进行组织;而在MyISAM存储引擎中,就没有聚集索引了,因为MyISAM存储引擎中的数据不是按索引顺序进行存储的。

    好了,到此为止,关于非常重要的数据库索引的概念应该非常清楚了,对吧。后面继续再出实战和优化方面的文章

    展开全文
  • 泻药,字典和专业的数据库相比起来还是区别的,虽说都可以通过key索引出值,但事实上,数据库的数据是保存在硬盘中的,而python的容器,都是建立在运行时之上,也就是说只有在程序被执行的时候才会生效,一旦程序...

    泻药,字典和专业的数据库相比起来还是有区别的,虽说都可以通过key索引出值,但事实上,数据库的数据是保存在硬盘中的,而python的容器,都是建立在运行时之上,也就是说只有在程序被执行的时候才会生效,一旦程序关闭或异常退出,数据就没了,从性能上看肯定是字典会比调用数据库强,但从实用性来讲,远远不如数据库,如果您想用字典作为存储器,您需要考虑以下几点:

    1.内存足够大,考虑到数据存储,那么势必只增不减,如果内存不足将会导系统变得缓慢、程序会由于内存溢出而自动退出;

    2. 稳定程序,这个也是很重要,因为你选择直接用字典作为存储器,那么就表示你的程序一旦运行就不能停止,因为一旦停止,所有保存的数据都将化为乌有,所有需要保证程序不会以任何形式退出。

    3. 如果数据量大,要定时清理一些不必要的数据,以防止内存溢出导致程序崩溃。

    综上所述,字典并不能供你随时查询调用,仅在运行时生效,那么您只要考虑好以上几点就可以使用字典作为存储器来存储数据,其实,想要提高效率,还是有办法的,比如借助redis这种内存数据库,它就是在运行时在内存中创建临时存储空间用以存放临时数据,但它还支持转存到硬盘,即使程序中断或异常退出了,还是可以通过存档找回上次的位置,并且它还支持列队传输,事实上在py中,它返回的也是dict类型,所以如果实在不想用传统的数据库,可以考虑下内存数据库,希望能帮到您!

    展开全文
  • 正是因为数据库后,所有人可以直接在这个系统上查找数据和修改数据。例如你每天使用余额宝查看自己的账户收益,就是从后台数据库读取数据后给你的。数据库通常包含一个或多个表组成。如果你过Excel,就会知道...

    数据库呢,就是存储数据的地方,就像冰箱是存储食物的地方一样。正是因为有了数据库后,所有人可以直接在这个系统上查找数据和修改数据。例如你每天使用余额宝查看自己的账户收益,就是从后台数据库读取数据后给你的。

    数据库通常包含一个或多个表组成。如果你用过Excel,就会知道Excel是一张一张的二维表。每个表都是由列和行组成的,其中每一列都用名字来标识出来。同样的,数据库里存放的也是一张一张的表,只不过各个表之间是有联系的。所以,简单来说:

    数据库=多张表+各表之间的关系

    其实数据库是逻辑上的概念,它是一堆互相关联的数据,放在物理实体上,是一堆写在磁盘上的文件,文件中有数据。这些最基础的数据组成了表

    那么如何学会数据库呢?学会数据库你需要掌握以下两点:

    1)数据库表的结构

    2)各表之间的关系

    总结下这部分的学习内容:

    1. 什么是数据库?

    数据库=多张表+各表之间的关系

    2. 数据库表长什么样?

    数据库中每个表由一个名字标识。表包含带有列名的列,和记录数据的行。

    ID是数据库中重要的概念,叫做唯一标识符或者主键,用来表示数据的唯一性。

    3. 数据库里各个表之间如何建立联系呢?

    数据库中,如果你要关联其他表,一般会以「表名_ID」作为联接。

    联系就是数据能够对应匹配,在数据库中正式名称叫联接,对应的操作叫做join。

    4.数据库和SQL是什么关系?

    数据库里面放着数据,而SQL是用来操作数据库里数据的语言(工具)。

    例如有一碗米饭(碗就是mysql,里面放的米是数据),你要吃碗里的米饭,拿什么吃?拿筷子(sql)。用筷子(sql)操作碗里(mysql)的米饭(数据)

    如果还是不太明白的就直接找一本《SQL基础教程》(作者:Mick)看书中第1章(注意:第0章不需要看,因为我们后面使用的mysql数据库)。

    也有人推荐《sql必知必会》,但是对于零基础的朋友来说Mick的《sql基础教程》更容易看懂学会,非常适合入门者学习。如果只推荐一本书的话,我只推荐这本。

    编程学习关注Qqun 1020048870,持续更新编程知识!!!

    展开全文
  • 数据库基本概念数据库什么存储数据的仓库列表,字典...等等 都是内存中的,缺点:断电丢失优点:速度快文件储存缺点:速度慢优点:可以实现永久保存数据库的本质就是一套基于CS结构的 客户端和服务器程序,最终的...
  • 项目的数据库字典表是一个很重要的文档。通过此文档可以清晰的了解数据表结构及开发者的设计意图。通常为了方便我都是直接在数据库中建表,然后通过工具导出数据字典。在Mysql数据库中一个information_schema库,...
  • 在这篇短文中,我将试着解释它们是什么以及它们之间的区别。数据模型组织数据元素及其关系的抽象模型。它与任何实现都没有关系。数据模型可以多种形式表示,如实体关系图或UML类图。数据字典是每个数据元素的引用...
  • 项目的数据库字典表是一个很重要的文档。通过此文档可以清晰的了解数据表结构及开发者的设计意图。通常为了方便我都是直接在数据库中建表,然后通过工具导出数据字典,但是通过一番Google后发现导出数据字典的工具很...
  • 它是一个存放有数据库所用的有关信息,在数据库设计的初期将数据库中的各类数据的描述集合在一起,用于在开发,维护或者其他需要的时候使用,可以类比成我们现实中的字典。数据字典通常包括:(l)数据项;(2)数据结构...
  • 小史:树的话,无非就是前中后序遍历、二叉树、二叉搜索树、平衡二叉树,更高级一点的红黑树、B 树、B+ 树,还有之前你教我的字典树。 红黑树 一听到红黑树,小史头都大了,开始抱怨了起来。 小史...
  • 项目的数据库字典表是一个很重要的文档。通过此文档可以清晰的了解数据表结构及开发者的设计意图。通常为了方便我都是直接在数据库中建表,然后通过工具导出数据字典。在Mysql数据库中一个information_schema库,...
  • 在这篇短文中,我将试着解释它们是什么以及它们之间的区别。数据模型组织数据元素及其关系的抽象模型。它与任何实现都没有关系。数据模型可以多种形式表示,如实体关系图或UML类图。数据字典是每个数据元素的引用...
  • 项目的数据库字典表是一个很重要的文档。通过此文档可以清晰的了解数据表结构及开发者的设计意图。通常为了方便我都是直接在数据库中建表,然后通过工具导出数据字典。在Mysql数据库中一个information_schema库,...
  • 什么模块 Python不仅自带的模块(称之为标准库),还有海量的第三方模块,并且很多开发者还在不断贡献自己开发的新模块,正是了这么强大的“模块自信”,Python才被很多人钟爱。并且这种方式也正在不断被...
  • <br />我们学、.NET的都知道,程序集(Assembly)的一个很大的优点就是它元数据,可以“自描述”。在我们体验这种优势的同时,我们是否想过什么时候数据库中的信息也是自描述的该多好? 我想Sql Server...
  • 在这篇短文中,我将试着解释它们是什么以及它们之间的区别。数据模型组织数据元素及其关系的抽象模型。它与任何实现都没有关系。数据模型可以多种形式表示,如实体关系图或UML类图。数据字典是每个数据元素的引用...
  • 项目的数据库字典表是一个很重要的文档。通过此文档可以清晰的了解数据表结构及开发者的设计意图。通常为了方便我都是直接在数据库中建表,然后通过工具导出数据字典。 在Mysql数据库中一个information_schema库,...
  • 这里一个适合我的现成的解决方案;它是为python 3.1编写的(当返回到py2.x时,要特别注意bytes/unicode文本的区别)。你的单一接入点就是DRWHO.whois(),它期望传入一个域名;...DHWHO将返回带单个条目的字典text,其中...
  • 一、SQL视图是什么,有什么用?简单直白地说,视图是数据库表的一种虚拟映射。它可以是展示数据库表的部分数据(字段切片或维度切片),也可以是在数据库表之上处理后的数据结果。所以视图最大的特征是:视图是通过...
  • 我们学、.NET的都知道,程序集(Assembly)的一个很大的优点就是它元数据,可以“自描述”。在我们体验这种优势的同时,我们是否想过什么时候数据库中的信息也是自描述的该多好? 我想Sql Server中扩展属性,...
  • 目录一、什么是索引以及为什么索引二、索引的分类三、实现原理四、物理存储五、索引的优化 在实际的面试中,遇到数据库的问题大致事务、锁、索引、以及SQL调优等方面的问题。索引算是一个比较基础的知识点了...
  • pd设计数据库模型生成数据库字典,是大家都经常做的事情,但是在实际中,对与pd9.5一点不方便的地方是关于列的注释不能在生成数据库的过程中生成,很麻烦。这里就主要解决这个问题,如果图片贴比较麻烦,大家...
  • 一、SQL视图是什么,有什么用?简单直白地说,视图是数据库表的一种虚拟映射。它可以是展示数据库表的部分数据(字段切片或维度切片),也可以是在数据库表之上处理后的数据结果。所以视图最大的特征是:视图是通过...
  • 数据库索引

    2019-08-30 16:28:20
    什么索引? 当数据量较大时,避免将全表加载到内存,进行全表的扫描,加快查找的速度和节约内存。这跟查字典的原理是一样的,目录就是索引,假如你查一个汉字,肯定不会一页一页的查询后面的正文吧。。。 B树 ...
  • 02.单机数据库

    2020-09-05 09:53:29
    文章目录1.数据库2. 过期键3. 过期键的删除策略4. RDB持久化4.1 RDB文件的创建和载入4.2 自动间歇性保存4.3 读取RDB文件5. AOF持久化5.1 AOF持久化的实现5.2 AOF文件的载入...过期时间还是用字典做的,原理也很好理解。

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 331
精华内容 132
关键字:

数据库字典有什么用