在Redis中存储数据时,经常使用string和hash这两种类型,至于这两者有什么不同,底层实现有何区别,推荐参考:https://segmentfault.com/a/1190000019552836
Monthly Archives: August 2019
一文理解MySQL中的page页
在介绍InnoDB中的页的时候,很有必要先让大家了解一下InnoDB中的存储结构

从InnoDB存储引擎的逻辑结构看,所有数据都被逻辑地存放在一个空间内,称为表空间(tablespace),而表空间由段(sengment)、区(extent)、页(page)组成。 在一些文档中extend又称块(block)。
一、表空间(table space)
表空间(Tablespace)是一个逻辑容器,表空间存储的对象是段,在一个表空间中可以有一个或多个段,但是一个段只能属于一个表空间。数据库由一个或多个表空间组成,表空间从管理上可以划分为系统表空间、用户表空间、撤销表空间、临时表空间等。
在 InnoDB 中存在两种表空间的类型:共享表空间和独立表空间。如果是共享表空间就意味着多张表共用一个表空间。如果是独立表空间,就意味着每张表有一个独立的表空间,也就是数据和索引信息都会保存在自己的表空间中。独立的表空间可以在不同的数据库之间进行迁移。可通过命令
Continue reading一列说明数组与Hash效率的区别到底多大
在数组中添加 10000 个元素,然后分别对这 10000 个元素进行检索,最后统计检索的时间。
数组Array
import time # 插入数据,数组 result = [] for i in range(10000): result.append(i) # 检索数据 time_start=time.time() for i in range(10000): temp = result.index(i) time_end=time.time() print('检索时间', time_end-time_start)
运行结果:
检索时间为 1.2436728477478027 秒。
Hash哈希
import time # 插入数据 result = {} for i in range(1000000): result[i] = i # 检索数据 time_start=time.time() for i in range(10000): temp = result[i] time_end=time.time() print('检索时间:',time_end-time_start)
运行结果:
检索时间为 0.0019941329956054688 秒。
你能看到 Hash 方式检索差不多用了 2 毫秒的时间,检索效率提升得非常明显。这是因为 Hash 只需要一步就可以找到对应的取值,算法复杂度为 O(1),而数组检索数据的算法复杂度为 O(n)。
看来两者的运行效率差别还是挺大的,所以在开发中我们一定要根据不同的场景选择使用不同的算法为好。