JDBC

关于数据库的What 和 Why

之前我们在计算程序模型中提到过,在计算机世界中需要处理的几个核心问题:

  • 存储
  • 计算
  • 交互 具体到存储这一块,之前我们了解过
  • 存储设备 – 内存和硬盘,以及对具体硬盘磁片的存储单元,块和内存的存储单元
  • 文件系统 – 在操作系统层面上对存储的抽象,比如目录和文件
  • 应用程序 – 针对不同的应用场景,可能数据内容的形式和模型会有不同的需求。
    比如说,Web程序可能很多文本形式的数据,多媒体数据等等再一层抽象和封装

数据库则是提供针对不同类型的应用程序
(Web前端程序,Web后端程序,终端应用等等)
的通用数据存储,组织,管理和数据访问,的需求的高级抽象

本质上,我们谈存储和数据,就是在谈状态
比如:

  • 账号信息:账号,密码,登录状态
  • 产品信息:库存信息,产品价格,消息信息(状态)
  • 订单信息等等

对状态(数据)的维持管理 ->存储和组织(所有的应用程序都需要)

存储,不管哪个层面上,都是为了在特定的时限和资源下保存这些实体的状态

然后很重要的一类计算就是对这些实体的状态的转换和维护,以及比如:

  • 更新账号密码
  • 更新产品的库存
  • 创建订单

对状态的访问 -> 操作(所有的应用程序都需要)

从各种各样的应用程序实例中,提炼抽象出的一些通用的数据存储需求,一起实现到一套系统中,就产生了数据库:

  • 数据存储
    所有数据都存储到单一文件里或者多个文件里?所有数据是否都存储到单一的机器里?
    存储在什么样的设备:内存 硬盘 云服务
    不同的存储 ->使用的方便性和和性能

  • 数据结构和组织
    (面试要明白这个底层结构!)
    SQL关系数据库:按表和行去组织,底层大概是一个红黑树结构(?)
    Key-Value数据库:Hash表(数据库变大了会很难处理?)
    图的数据库:图结构 ->很容易表达社交网络
    对象模型:JSON这样的结构去存储,MongoDB和DynamoDB

硬盘没有内存快,单文件的并发性低,数据吞吐量低

冗余对数据查找的作用?

  • 数据索引(如何找到数据)
    索引的结构是什么样的?
    支持什么样的索引?
    顺序、哈希表、分层索引

  • 数据的更新和查询
    关系数据库:SQL语言(SQL命令)

  • 数据的备份和冗余(防止丢失和保持可用)
    备份的方式:全量备份和增量备份
    恢复方式
    不通过数据库的支持
    备份时间,备份格式,备份压缩

  • 数据一致性,可用性(冗余和事务)
    冗余 -> 一致性问题
    CAP:一致性,可用性,分区容错性(无法同时满足)

  • 数据管理
    数据分析的工具
    访问的工具

  • 规模和Scalability(可扩展性)

  • 等等

市面上各种不同的数据库,就是针对不同的场景和不同的需求,对以上的问题提出针对性的解决方案,并且有不同的侧重点

HDFS和Map

Mapreduce?

数据库类型

按照上面的逻辑,,数据库的特性是应用需求是多维度的,所以我们在考虑数据库的分类的时候,也得从不同维度来考虑

从数据结构和组织

关系数据库/SQL
MySQL,Oracle,DB2,PstegreSQL,SQLite

对象/Document/列-Base(NoSQL)
MongoDB,DynamoDB等等


Key-Value
leveldb(https://github.com/google/leveldb)

时间序列
比如金融量化交易系统的金融数据,时间维度是很重要的

从数据存储

终端应用数据库

在应用本地数据库的数据库,比如Web前端,Android/ios应用的本地数据库。

  • SQLite

内存数据库

在后端系统中,可能需要一些访问更快但是不需要持久性的数据,就可能需要在内存中的数据库,
但是可以更快的读取和更新速度

比如:

  • Web程序中的用户登录状态,就可以存储在内存里,如果Web后端程序重启之后,
    内存的数据库会丢失,但是只需要用户重新登录就好了,但是可以获得更快的更新和读取速度

  • 爬虫中的已经访问过的URLs

持久化数据库

MySQL,Oracle,MongoDB可能会更关注持久性存储,冗余和备份,保证数据的安全(Security和Safety)等等

分布式数据库

数据规模扩大之后,可能需要在多台机器(分布式)上存储,同时提供保证大量数据的存储能力,数据冗余,高吞吐的能力

云数据库

云上的完整解决方案,按需付费,可伸缩性,更专业稳定的运维能力

区块链

区块链本质上是一个可以完全分布到整个互联网的数据库!

关系数据库

关系型数据库是对一类数据库设计经验的总结和设计方法的抽象,以期得到一个通用的数据库的解决方法
关系数据组织数据的基本结构:

  • 数据库
  • 数据库表
  • 数据库字段
  • 数据库记录

SQL是一个对SQL数据库的查询和操作的通用语言

JDBC

Java程序连接SQL数据库,操作SQL数据库和执行SQL语句的库

  • 程序接口
  • 数据库驱动程序

Scalability
Reliability
Data Infrastructure
可扩展性
可靠性
数据架构
IOT挑战性
API建模 + 数据建模

面试
单元测试要怎么写?这是一个加分项,不问也要主动提出
存储数据,怎么设计本地的数据库?

怎么去组织API