二手物品资源管理功能

老师、学生均可以在平台发布想要售卖的物品,并配上实物图片、价格及相关描述。

老师学生均可以在平台上选择想要购买的物品,然后留言卖家进行购买

文件:url80.ctfile.com/f/25127180-743370492-a60a55?p=551685 (访问密码: 551685)

留言沟通模块

买家可以在卖家的物品下留言,进行协商。卖家可以在自己物品的留言上进行回复,与买家协商。

二手物品信息管理模块

卖家能够在物品卖出后,标明物品已售出,以后不会再显示。卖家可以随时调整物体的价格、图片、相关描述。

物品分类搜索模块

所有发布售卖的物品,都要由卖家进行归类,买家可以在分类中寻找或者搜索相关描述进行寻找。

用户登录验证模块

老师或学生在注册时进行身份验证,上传工作证或学生证,由后台人工验证。


MySQL的索引是一个非常重要的知识点,也基本上是面试必考的一个技术点,所以非常重要。那你了解MySQL索引的数据结构是怎么样的吗?为什么要采用这样的数据结构?

现在化身为MySQL的架构师,一步步迭代设计出MySQL的索引结构,保证你再也忘记不了索引的结构了,轻松通过面试。

索引介绍
MySQL表中存储的数据量非常大,可能有上亿条记录,如果一条条去匹配,就是所谓的全表扫描,会非常的慢。那么有什么办法呢?

想想我们生活中的例子,比如新华字典,我们有一个目录,目录根据拼音排序,内容包含了汉字位于字典中具体的的页码。聪明的你肯定也想到了,我们也可以借鉴这种思想,建立一个MySQL的目录,叫做“索引”。

所以你对“索引”做了抽象和定义:索引(Index)是帮助MySQL高效获取数据的数据结构。

索引是在存储引擎中实现的,因此每种存储引擎的索引不一定完全相同,MySQL有InnoDB、MyISAM、Memory等存储引擎,你想了下,就拿最常用的InnoDB作为存储引擎设计索引。

索引设计目标
你现在拼命转动大脑,开始去思考如何设计出这样的一个索引结构。你就在脑子里想,索引设计中需要解决哪些问题,以及要达成什么样的目标。

我要怎么样才能在索引目录(数据结构)中快速找到具体的某条数据记录呢?那么这个数据结构需要有顺序规律,我按照这个规律就可以定位到具体的某条数据。
MySQL中的数据中的记录如何能够快速找到呢?是不是可以将记录进行排序,然后根据 二分法 快速找到对应的数据记录。
MySQL中架构老大一开始定义数据是按照数据页存放的,每个数据页默认是16kb, 每次满了,就会重新有新的一页。我的索引目录数据应该也是放到页中,而且索引的数据尽量少些,这样每页可以放更多的目录信息。
我怎么样才能查询效率最高呢?其实每次慢都是慢在磁盘IO上,我再后面设计中一定要减少磁盘IO的访问,越少访问磁盘IO越好。
磁盘中的空间还是不连续的啊,那我还得有个指针去连接下一条记录的位置。
带着这些问题和思考,你开始设计啦。

索引设计迭代
你想着我就拿一个例子具象化的思考设计索引。

下面是一个新建的表:

CREATE TABLE demo(
c1 INT,
c2 INT,
c3 CHAR(1),
PRIMARY KEY(c1)
) ROW_FORMAT = Compact;
行记录的格式简化如下:

我们只在示意图里展示记录的这几个部分:

record_type:记录头信息的一项属性,表示记录的类型, 0 表示普通记录、 2 表示最小记录、 3 表示最大记录、 1 暂时还没用过,下面讲。
next_record:记录头信息的一项属性,表示下一条地址相对于本条记录的地址偏移量,我们用箭头来表明下一条记录是谁。
各个列的值:这里只记录在 index_demo 表中的三个列,分别是 c1 、 c2 和 c3 。
其他信息:除了上述3种信息以外的所有信息,包括其他隐藏列的值以及记录的额外信息。
把一些记录放到页里的示意图就是:

注意:一页可以存放16kb的数据,并不是图上的3条数据,这里只是一个示例。

迭代一
我们为什么要遍历所有的数据页或者记录?因为各个页中的记录并没有规律,不知道这条数据出现在哪个数据页中。那么如何快速定位要查找的数据在哪个数据页中呢?我们需要建立一定的规律,如下:

下一个数据页中用户记录的主键值必须大于上一个页中用户记录的主键值。

页中的数据根据主键按顺序排序
不同页中的数据,下一页数据大于上一页数据
新分配的数据页编号可能并不是连续的。它们只是通过维护者上一个页和下一个页的编号而建立了 链表 关系
给所有的页建立一个目录项

key表示目录中最小的主键值。
page_on表示对应的页码。
查找主键值为 20 的记录,具体查找过程分两步:

先从目录项中根据二分法快速确定出主键值为 20 的记录在 目录项3 中(因为 12 < 20 < 209 ),它对应的页是页9。

再根据前边说的在页中查找记录的方式去页9中定位具体的记录。

迭代二
迭代一中的目录项是怎么存储的呢?我们是不是也可以用行记录格式存储到数据页中呢。答案是肯定的,我们通过行记录格式中的record_type等于1表示是目录记录,如下图所示:

目录项记录的 record_type 值是1,而 普通用户记录的 record_type 值是0。
目录项记录只有主键值和页的编号两个列,而普通的用户记录的列是用户自己定义的,可能包含很多列 ,另外还有InnoDB自己添加的隐藏列。
现在以查找主键为 20 的记录为例,根据某个主键值去查找记录的步骤就可以大致拆分成下边两步:

先到存储目录项记录的页,也就是页30中通过二分法快速定位到对应目录项,因为 12 < 20 < 209 ,所以定位到对应的记录所在的页就是页9。

再到存储用户记录的页9中根据二分法快速定位到主键值为20的用户记录。

迭代三
随着数据量变多,势必一个目录项存放不下,因为一页只有16kb大小,就会分裂出多页,如下图所示:

那么现在查找主键值为 20 的记录,流程如下:

我们现在的存储目录项记录的页有两个,即页30和页32 ,又因为页30表示的目录项的主键值的 范围是 [1, 320) ,页32表示的目录项的主键值不小于 320 ,所以主键值为 20 的记录对应的目录项记录在页30中。

通过目录项记录页确定用户记录真实所在的页。

在真实存储用户记录的页中定位到具体的记录。

迭代四
如果我们表中的数据非常多则会产生很多存储目录项记录的页,如果直接这么查,也是很慢,我们是不是可以针对目录项记录的页再生成一个更高级的目录,就像是一个多级目录一样,如下图所示:

那么现在查找主键值为 20 的记录,流程如下:

生成了一个存储更高级目录项的页33,这个页中的两条记录分别代表页30和页32, 主键20的记录在 [1, 320) 之间,则到页30中查找更详细的目录项记录。

在页30中通过二分法查找主键为20记录的用户记录页码。

在真实存储用户记录的页中定位到具体的记录。

迭代小结
以上这个数据结构就是我们索引最终的数据结构,B+树, 图形描述如下:

所有的叶子节点存放全量的用户记录信息,包含所有的字段。
所有的目录节点只存放索引字段、主键以及对应的页码信息,要求信息越少越好,因为一页最多16kb,只有目录信息越少,每页存放的信息越多,树的层级就越小,树的层级越小,那么和磁盘的IO就越少,查询就会越快。一般来说,B+树4层,就可以存放上亿数据了。
索引结构总结
聚簇索引
我们按照前面的迭代推演出了基于主键的索引结构,是一颗B+树,我们把这种索引叫做聚簇索引。

基于Android的校园二手交易平台App相关推荐

  1. 基于Android的校园二手商品交易平台,基于Android校园二手交易网站毕业设计论文.doc...

    基于Android校园二手交易网站毕业设计论文 本科生毕业设计(论文) 题 目: 基于Android的校园二手交易网站 姓 名: 学 号: 学 院: 专 业: 年 级: 校内指导教师: (签名) 校外 ...

  2. 基于Android的校园二手闲置物品交易系统设计与实现

    一.选题背景和意义 随着商品经济的快速发展,人们的生活中出现了大量的闲置物品,这种现象在当代大学生中尤为显著.大多数学生是通过摆地摊的方式来交易闲置物品,这种交易方式效率低下并且信息滞后.还有一部分学 ...

  3. Android Studio校园二手交易市场app

    [安卓大作业]Android Studio校园二手交易市场app 界面展示 主要功能 1.登陆注册用户,若忘记密码可通过邮箱找回密码: 2.商品分类展示,可在首页购买商品: 3.商品详情页可留言.收藏 ...

  4. Java毕业设计_基于Android的校园二手商品交易平台

    基于Android的校园二手商品交易平台 基于Android的校园二手商品交易平台mysql数据库创建语句 基于Android的校园二手商品交易平台oracle数据库创建语句 基于Android的校园 ...

  5. 基于javaweb+SSH校园二手交易平台

    基于javaweb+SSH校园二手交易平台 开发工具:eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练习,学习演示等 int outnum ...

  6. 基于JSP实现校园二手交易平台

    项目说明: 本项目基于SSH框架和JSP页面实现一个校园二手交易平台,个人注册登陆后可以在平台上发布自己的二手物品信息,发布时提供个人联系方式以方便线下交易,本平台不支持线上交易购买.项目简洁大方,有 ...

  7. 精品基于SSM的校园二手交易平台

    <基于SSM校园二手交易平台>该项目含有源码.论文等资料.配套开发软件.软件安装教程.项目发布教程等 使用技术: 开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1.8 ...

  8. 基于Java的校园二手交易平台

    校园二手交易平台是基于Java语言,Springboot框架, Mysql数据库,Html/JavaScript/Css技术的高校二手交易平台.系统包含:前端和后端项目.角色分为:普通学生.管理员. ...

  9. ssm基于Android的校园考研论坛APP(ssm+uinapp+Mysql)

    网络的广泛应用给生活带来了十分的便利.所以把校园考研论坛管理与现在网络相结合,利用java技术建设基于Android的校园考研论坛,实现校园考研论坛的信息化.则对于进一步提高校园考研论坛管理发展,丰富 ...

最新文章

  1. 1052 Linked List Sorting
  2. 计算机课代表自荐信,课代表自荐信范文
  3. Java反射之如何判断类或变量、方法的修饰符(Modifier解析)
  4. java 原生数据类型的转换_Java基本数据类型转换分析
  5. HTML向Flex传参
  6. mysql 平滑扩容_数据库秒级平滑扩容架构方案
  7. Java 这么卷,要转 Go 吗?
  8. sublime3定制化为python3编辑利器。
  9. curl get请求传递参数_使用curl调用restful API
  10. KITTI数据集GPS数据格式dataformat
  11. matlab 16位直方图均衡化,matlab 直方图均衡化
  12. git 内网搭建_Gitlab搭建内网服务器
  13. 手摸手带你 App 爬虫入门
  14. Ubuntu16.04安装以及在 TitanX 下搭建 caffe框架(cuda8.0 + cudnn5.1)
  15. Yonex 各系列球拍指数
  16. R语言利用wordcloud2绘制词云
  17. VS 显示方法引用的设置方法
  18. 程序员公众号编辑工具
  19. MySql 指定某一字段排在前面
  20. OpenCV Error:(mtype == CV_8U || mtype == CV_8S) _mask.sameSize(*psrc1) in function ‘binary_op‘

热门文章

  1. MOXA NPort5630串口设备联网服务器
  2. Java: 猜拳游戏
  3. html+css 制作小米商城主体内容的商品展示
  4. 湖仓一体:从零开始搭建数据仓库
  5. 2017-4-15,16
  6. uniapp实现下拉加载更多 u-loadmore
  7. Hibernate 参数查询
  8. P1217 回文质数
  9. 故事分享|B站up主的感悟:粉丝从0到1.4万,我做对了什么?
  10. JDK动态代理源码解析