大量的数据做字符串匹配_数据库基础回顾

c5beeabfcfbff58b9dde91059af39cff.png

数据库用来做什么?为什么要用数据库

数据库就是用来存储数据的。

我们可以用文本文档,excel文档,文件夹中的各种文件来存储数据。那么用数据库存储数据有什么优点?

相对于其它方式,用数据库存储数据有以下优点:

  • 解决数据的大小问题,可存储大量数据
  • 容易更新
  • 准确性
  • 解决数据冗余,比如在excel中有成千上万的数据不容易查找重复的数据
  • 更安全,比如用文件的方式容易泄露数据
  • 重要性,数据更安全,数据库更容易容灾备份

数据库的相关概念

使用主键管理数据唯一性

使用主键和外键管理一对多的数据

使用联合表管理多对多的数据(一般该表中只有两列,每列对应另外一个表中的主键)

DBMS (Database management system)数据库管理系统,用来管理数据库,严格的说我们通常说的Oracle,MS SQL,DB2等都是DBMS而不是数据库。

ACID原则:(Atomic Consistent Isolated Durable)数据库中事务的几个原则

  • 原子性:要么全部成功,要么全部不成功,回到最初状态;
  • 一致性:所有事务不管并发还是穿行执行后数据是一致的;
  • 隔离性: 同一时间只有一个请求作用于同一数据;
  • 持久性:事务完成后,该事务对数据库所做的更改便持久的保存在数据库中,并不会被回滚。

SQL:(Structured query language)是申明式查询语言,用来做在数据库中做CRUD(Create Read Update Delete)创建读取更新删除操作

SQL中支持的运算符:> < <> >= <= AND OR

字符串使用单引号

可使用LIKE like 'a_c' 可匹配abc acc adc等等

使用LIKE 'my%' 可匹配my开头的任意字符串

是否为空 IS NULL, IS NOT NULL

聚合函数:MAX MIN COUNT SUM AVG GROUP BY

JOIN table ON (默认为内联)

外联:LEFT OUTER JOIN 左边的表中的数据会全部列出

RIGHT OUTER JOIN 右边的表中的数据会全部列出

数据库建模需要考虑的问题:

  • 我创建这个数据库是用来做什么?
  • 我已经有什么?(已有的数据,人员储备,现有数据库)
  • 有哪些entities?(你的实际业务对象)
  • 每个entity有哪些属性?(规范属性命名,属性类型,是否必须,是否需要Unicode,是否有缺省值)

组合键:单个键不是唯一,组合后是唯一的

ER 图(Entity relationship diagram):便于理解数据库中的逻辑关系

参考完整性:数据库中为保障数据一致性和完整性的强制规则,比如不能插入外键不存在的数据

关系型数据库的范式(Normalization Format):

  • 第一范式(1NF):每列数据只存一个数据,而不是数据集合
  • 第二范式(2NF):首先需要满足第一范式,其次表中非键值的列依赖于键值(只在有组合键的时候需要考虑)
  • 第三范式(3NF):首先需要满足第二范式,其次没有非键值的列依赖于别的非键值的列

有时候为了性能会破坏范式

DDL (Data Definition language)用来定义数据库的schema

VARCHAR(variable length character)可变长字符串,是数据库表中某列的数据类型,其优点可变长灵活,但固定长度可能更节省空间和效率。

索引:clustered index(主键索引)non-clustered index 非主键索引,索引可以大大提高查询效率,但是如果数据库表中未每一个列都做索引会大大阻碍数据写入效率,因为会增加插入索引表的时间。

事务锁

为了保证数据不会被同时修改发生差错,引入事务锁的概念,在同一时间,只能有一个请求可以操作同一数据。

悲观锁(Pessimistic locking ),总是假设最坏的情况,每次取数据时都认为其他线程会修改,所以都会加锁(读锁、写锁、行锁等),当其他线程想要访问数据时,都需要阻塞挂起。

乐观锁(Optimistic locking),总是认为不会产生并发问题,每次去取数据的时候总认为不会有其他线程对数据进行修改,因此不会上锁,但是在更新时会判断其他线程在这之前有没有对数据进行修改。

存储过程:将SQL作为函数存储在数据库中供外部调用,好处是DBA可以进行充分优化,可以传递参数,可避免SQL注入

ORM(object-relational mapping)对象关系映射,为编程语言和关系型数据库表之间做对象关系映射

ca49c04070cf021f39329674c3c4efb5.png

数据库的分类

  • 关系型数据库:目前最成熟应用最广泛的数据库
  • 对象数据库:为了解决面向对象编程和原有关系型数据库的表不匹配的痛点
  • 键值数据库:数据作为键和值存储
  • 文档数据库:数据作为文档存储
  • 图数据库:更加侧重数据中的关系和连接
  • NoSQL数据库:NoSQL数据库已经演变为Not only SQL数据库,表示不仅仅是sql数据库,是一种新型的数据库类型,它包括上面的文档数据库,图数据库等

在传统关系型数据库和NoSQL数据库中选择:

你是否需要弹性的schema?如果你的数据库schema经常变动,NOSQL会是更好的选择。

你是否有非常大量的数据?如果你的数据量非常大,NOSQL也许更适合你。

你最在意扩展性还是数据一致性?数据一致性是关系型数据的强项,相对来说NOSQL数据库的扩展性可能更好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值