数据库设计

大数据下高并发的处理详解

别等时光非礼了梦想. 提交于 2019-11-29 13:19:17
对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了。而并发问题是绝大部分的程序员头疼的问题,但话又说回来了,既然逃避不掉,那我们就要想想应对措施,今天我们就一起讨论一下常见的并发和同步吧。 首先为了更好的理解并发和同步,我们需要首先明白两个重要的概念: 同步和异步 同步和异步的区别和联系 所谓同步,就是一个线程执行一个方法或函数的时候,会阻塞其它线程,其他线程要等待它执行完毕才能继续执行。 异步,就是多个线程之间没有阻塞,多个线程同时执行。 通俗一点来说,同步就是一件事一件事的做,异步就是做一件事,不影响做其他事情。 例如:吃饭和说话,只能一件一件的来,因为只有一张嘴。 但是吃饭和听音乐是异步的,可以一起进行,因为听音乐并不影响我们吃饭。 对于Java程序员来说,Synchronized最为熟悉了,如果它作用于一个类的话,那么就是一个线程访问类的方法时,其他线程就会阻塞,相反,如果没有这个关键字来修饰的话,不同线程就可以在同一时间访问同一个方法,这就是异步。 脏读和不可重复读 脏读 脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这是,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读取的这个数据是脏数据(Dirty Data)

RBAC用户权限管理数据库设计

♀尐吖头ヾ 提交于 2019-11-29 09:48:30
http://minjiechenjava.iteye.com/blog/1759482 RBAC 用户权限管理数据库设计 博客分类: RBAC 权限设计 RBAC RBAC ( Role-Based Access Control ,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成 " 用户 - 角色 - 权限 " 的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。(如下图) 角色是什么?可以理解为一定数量的权限的集合,权限的载体。例如:一个论坛系统, " 超级管理员 " 、 " 版主 " 都是角色。版主可管理版内的帖子、可管理版内的用户等,这些是权限。要给某个用户授予这些权限,不需要直接将权限授予用户,可将 " 版主 " 这个角色赋予该用户。 当用户的数量非常大时,要给系统每个用户逐一授权(授角色),是件非常烦琐的事情。这时,就需要给用户分组,每个用户组内有多个用户。除了可给用户授权外,还可以给用户组授权。这样一来,用户拥有的所有权限,就是用户个人拥有的权限与该用户所在用户组拥有的权限之和。(下图为用户组、用户与角色三者的关联关系) 在应用系统中,权限表现成什么?对功能模块的操作,对上传文件的删改,菜单的访问,甚至页面上某个按钮、某个图片的可见性控制,都可属于权限的范畴

用户权限管理数据库设计(RBAC)

喜你入骨 提交于 2019-11-29 09:44:15
 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。(如下图)   角色是什么?可以理解为一定数量的权限的集合,权限的载体。例如:一个论坛系统,“超级管理员”、“版主”都是角色。版主可管理版内的帖子、可管理版内的用户等,这些是权限。要给某个用户授予这些权限,不需要直接将权限授予用户,可将“版主”这个角色赋予该用户。   当用户的数量非常大时,要给系统每个用户逐一授权(授角色),是件非常烦琐的事情。这时,就需要给用户分组,每个用户组内有多个用户。除了可给用户授权外,还可以给用户组授权。这样一来,用户拥有的所有权限,就是用户个人拥有的权限与该用户所在用户组拥有的权限之和。(下图为用户组、用户与角色三者的关联关系)   在应用系统中,权限表现成什么?对功能模块的操作,对上传文件的删改,菜单的访问,甚至页面上某个按钮、某个图片的可见性控制,都可属于权限的范畴。有些权限设计,会把功能操作作为一类,而把文件、菜单、页面元素等作为另一类,这样构成“用户-角色-权限-资源”的授权模型。而在做数据表建模时,可把功能操作和资源统一管理,也就是都直接与权限表进行关联

【MySQL】MySQL 数据库设计铁律

只愿长相守 提交于 2019-11-29 05:42:54
好的数据库规范有助于减少软件实现的复杂度,降低沟通成本,本铁律主要涵盖了建库建表、建索引、写 SQL、ORM 映射等方面的处理约定。 1.建库铁律 2.建表铁律 设置合适的字符存储长度,不但可以节约数据库表空间和索引存储,更重要的是能够提升检索速度。 3.建索引铁律 4.写SQL铁律 5.ORM映射铁律 来源: https://blog.csdn.net/qq_37126357/article/details/100531983

mysql表连接,数据库设计

淺唱寂寞╮ 提交于 2019-11-29 04:43:07
左,右外连接: lef right select * from aaa left join bbb on aaa.id=bbb.id 不符合条件的数据用NULL补齐 子查询 : where in() select * from aaa where sid in(select sid from bbb where ccc=1) 联合查询: 多表连列 select sid,sname from aaa union select tid,tname from bbb 数据库设计: 实体1对n,m对n 1:1的关系:将实体转为表,任意1端实体的主键拿到另一端实体做外键 1:n的关系,关系不成表,将1端主键作为N端的外键 M:N的关系,关系形成表,同时将两端实体的主键作为该表外键,形成复合主 来源: https://www.cnblogs.com/god3064371/p/11453920.html

数据库设计的三大范式2

筅森魡賤 提交于 2019-11-29 04:42:50
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。 在实际开发中最为常见的设计范式有三个: 1 .第一范式 第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。 第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式,如下表所示。 用户信息表 编号 姓名 性别 年龄 联系电话 省份 城市 详细地址 1 张红欣 男 26 0378-23459876 河南 开封 朝阳区新华路23号 2 李四平 女 32 0751-65432584 广州 广东 白云区天明路148号 3 刘志国 男 21 0371-87659852 河南 郑州 二七区大学路198号 4 郭小明 女 27 0371-62556789 河南 郑州 新郑市薛店北街218号 上表所示的用户信息遵循了第一范式的要求

iBatis和Hibernate浅析

为君一笑 提交于 2019-11-29 01:08:04
iBatis和Hibernate浅析 Hibernate Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。 一、基本功能 Hibernate作为数据持久化的中间件,足以让数据库在业务逻辑层开发中去冬眠。它通过可扩展标记语言(XML)实现了类和数据表之间的映射,使程序员在业务逻辑的开发中面向数据库而改为面向对象开发。使整个项目开发分工更加明确,提高了程序开发的效率。 configuration对象: Configuration 类负责管理Hibernate 的配置信息。Hibernate 运行时需要 获取一些底层实现的基本信息,其中几个关键属性包括: 1. 数据库URL 2. 数据库用户 3. 数据库用户密码 4. 数据库JDBC驱动类 5. 数据库dialect,用于对特定数据库提供支持,其中包含了针对特定数据库特性的实现,如Hibernate数据类型到特定数据库数据类型的映射等。以上信息一般情况下由hibernate.cfg

14 个实用的数据库设计技巧

孤者浪人 提交于 2019-11-28 20:30:59
点击上方“ 后端技术精选 ”,选择“置顶公众号” 技术文章第一时间送达! 作者:echozh juejin.im/post/5d5b4c6951882569eb570958 原始单据与实体之间的关系 主键与外键 基本表的性质 范式标准 通俗地理解三个范式 要善于识别与正确处理多对多的关系 主键PK的取值方法 正确认识数据冗余 E--R图没有标准答案 视图技术在数据库设计中很有用 中间表、报表和临时表 完整性约束表现在三个方面 防止数据库设计打补丁的方法是“三少原则” 提高数据库运行效率的办法 1. 原始单据与实体之间的关系 可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体。这里的实体可以理解为基本表。明确这种对应关系后,对我们设计录入界面大有好处。 〖例1〗:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工基本情况表、社会关系表、工作简历表。这就是“一张原始单证对应多个实体”的典型例子。 2. 主键与外键 一般而言,一个实体不能既无主键又无外键。在E—R 图中, 处于叶子部位的实体, 可以定义主键,也可以不定义主键(因为它无子孙), 但必须要有外键(因为它有父亲)。 主键与外键的设计,在全局数据库的设计中

MyBatis开发重点知识

末鹿安然 提交于 2019-11-28 16:35:18
1.1 为什么需要 ORM 框架? 传统的 JDBC 编程存在的弊端: ü 工作量大,操作数据库至少要 5 步; ü 业务代码和技术代码耦合; ü 连接资源手动关闭,带来了隐患; MyBatis 前身是 iBatis, 其源于“ Internet ”和“ ibatis ”的组合,本质是一种半自动的 ORM 框架,除了 POJO 和映射关系之外,还需要编写 SQL 语句; Mybatis 映射文件三要素: SQL 、映射规则和 POJO ; 1.2 MyBatis 快速入门 步骤如下: 加入 mybatis 的依赖,版本 3.5.x 添加 mybatis 的配置文件,包括 MyBatis 核心文件和 mapper.xml 文件 场景介绍:基于 t_user 表单数据查询、多数据查询; 编写实体类、 mapper 接口以及 mapper xml 文件; 编写实例代码:com.enjoylearning.mybatis.MybatisDemo. quickStart 核心类分析: SqlSessionFactoryBuilder :读取配置信息创建 SqlSessionFactory ,建造者模式,方法级别生命周期; SqlSessionFactory :创建 Sqlsession ,工厂单例模式,存在于程序的整个生命周期; SqlSession :代表一次数据库连接,一般通过调用

数据库设计的概念

瘦欲@ 提交于 2019-11-28 12:52:48
一 、 数据库设计的概念 1.1 数据库设计的流程 在数据库设计的流程上 , 我们通常根据需求 , 画出数据的 ER 图 . 然后在通过 ER 图生成数据库的建库脚本。 ER 图,所谓的 ER 图就是 数据库关系图 1.2 为什么我们使用 ER 图来实现数据库设计的设计呢 ? 可见即可得 . 使用 ER 图可以通过图形的方式展示表与表直接的关系 可以根据设置的数据库 , 方便生成不同的数据库的 SQL 建库脚本 可以快速的生成数据库文档 二 、 数据库设计的基础理论 2.1 数据库设计的步骤 数据库设计师根据需求进行设计的 第一步:标识表的设计 第二步:表字段的设计 第三布:表与表之间的设计 2.2 标识表的注意事项 表分为实体表以及业务表 实体表:记录中描述一个对象的表,就是名词,例如用户、商品、订单等 业务表:就是需求中一个行为,关注、收藏等(大部分是中间表) 但我们通常在标识表时会先标识实体表 , 再标识业务表 . 因为业务表一般是用于标识实体表与另一个实体的多对多的关系的 . 2.3 标识字段要符合数据库三大范式 第一范式:确保标识的字段的原值性,字段的概念分得不能再分。如:姓名可以分为姓和名。 第二范式:确保标识的字段与表有依赖的关系,在用户表定义一个商品价格 第三方范式:确保标识的字段与表有 直接 依赖的关系,用户表,用户类型的名称 1 .第一范式(确保每列保持原子性)