01-开发成功数据库要点
开发成功数据库的要点
- 理解数据库体系结构
- 理解锁和并发控制特性
- 不要把数据库当黑盒
- 性能、安全性都是适当的被设计出来的
- 用尽可能简单的方法解决问题
- DBA和RD之间的关系
Oracle锁机制
一致性读:同一时间点,读出来的数据一定一样。
SQL和编程的差异
SQL强调非技巧化
限用Boolean字段
原因
- SQL中不存在Boolean类型
- 只表示标记位,和显示没有密切关联
1NF:单值使用
- 每个字段都要当成一个单一的值不可拆分,有现实意义
例子
- order_completed: boolean
- 修改为order_completion_date,completion_by
- 往往增加信息字段能包含更多的信息量,或增加order更多状态标识
过于灵活的危险性
- 不可思议的四通用表设计
- Objects(oid, name), Attributes(attrid, attrname,type)
- Object_Attributes(oid,attrid,value)
- Link(oid1,oid2)
- 问题:虽然完全正确,但任何一次查询都涉及表连接,效率大幅度下降
约束应该明确说明
- 数据中隐含约束是不良设计
- 数据语义属于DBMS,而不是放在应用程序中
- 数据约束
理解子类型
- 子类型是独立的还是相交的?
如何处理历史数据
- 例子:历史数据,商品在某一时刻的价格
- Price_history
- (article_id , effective_from_date , price)
- 缺点:查询当前价格比较笨拙
- 其他方案
- 定义终止时间
- 同时保持价格生效和失效日期
- 当前价格+历史价格表
架构:处理流程
- 操作模式
- 异步模式处理(批处理)
- 同步模式处理(实时交易)
- 处理数据的方式会影响我们物理结构的设计
架构:数据集中化
分布式系统复杂性大,但是吞吐量高
架构:系统复杂性
- 数据库错误
- 硬件出错
- 错误操作
- 数据恢复往往是RD和DBA争论焦点
- DBA,即便确保数据库本身工作正常,依然无法了解数据是否正确
- RD,在数据库恢复后进行所有的功能性的检查
存储差异性
database in memory
database in disk
面向行和面向列的数据库
- 行:提高空间局部性
- 列:方便对某些字段做聚合分析
宽表
- 标题: 01-开发成功数据库要点
- 作者: Charlie
- 创建于 : 2024-02-28 10:02:00
- 更新于 : 2024-07-05 12:55:04
- 链接: https://chillcharlie357.github.io/posts/66d265b9/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论