01-开发成功数据库要点

Charlie

开发成功数据库的要点

  1. 理解数据库体系结构
  2. 理解锁和并发控制特性
  3. 不要把数据库当黑盒
  4. 性能、安全性都是适当的被设计出来的
  5. 用尽可能简单的方法解决问题
  6. DBA和RD之间的关系

Oracle锁机制

一致性读:同一时间点,读出来的数据一定一样。

SQL和编程的差异

SQL强调非技巧化

限用Boolean字段

  • 原因

    1. SQL中不存在Boolean类型
    2. 只表示标记位,和显示没有密切关联
  • 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

  • 面向行和面向列的数据库

    • 行:提高空间局部性
    • 列:方便对某些字段做聚合分析
  • 宽表
    image.png

  • 标题: 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 进行许可。
评论