视图函数(Controller)

视图函数(Controller)
如何设计视图函数
1.用户的每个操作(用户故事)对应一个视图函数。
数据的完整性:

  • 实体完整性 - 没有冗余数据 - 主键/唯一索引

  • 参照完整性 - 外键

  • 域完整性 - 数据类型 / 长度 / 非空约束 / 默认值约束 / 检查约束
    2.每个视图函数可以构成一个事务边界。

  • 事务的ACID特性。

    • 原子性(Atomicity):事务中各项的操作要么全做要么全不做;
    • 一致性(Consistentcy):事务前后系统的状态是一致的;
    • 隔离性(Isolation):并发执行的事务无法看到彼此的中间状态;
    • 持久性(Duration):事务完成后所做的改动都会被持久化。
  • 事务隔离级别-设置事务隔离级别是为了数据库底层依据事务隔离级别为数据加上适当的锁。如果需要保证数据的强一致性,那么关系型数据库仍然是唯一的也是最好的选择,因为关系型数据库可以通过锁机制来保护数据。事务隔离级别从低到高依次是:Read Uncommitted(读未提交)、Read Commited(读提交)、Repeatable Read(可重复读)、Searializable(串行化)。事务隔离级别越高,数据并发访问的问题越少,但是性能越差;事务隔离级别越低,数据并发访问的问题越多,但是性能越好。

  • 数据库并发访问会产生的5种问题:

  • 第1类丢失更新(A事务撤销覆盖B事务更新的数据)和第2类丢失更新(A事务提交覆盖B事务更新的数据)。

  • 脏读(读脏数据):一个事务读取到其他尚未提交的事务的数据;

  • 不可重复读:一个事务在读取它的查询结果时,被另一个事务更新了他的查询记录导致无法读到数据。

  • 幻读:一个事务在读取它的查询结果时,发现读到了被另一个事务提交的新数据。
    set global transaction isolation level repeatable read;#设置全局默认的事务隔离级别
    set session transaction isolation level committed#设置当前会话的事务隔离级别
    select @@tx_isolation#查询当前会话的事务隔离级别

  • Django中的事务控制。

    • 给每个请求绑定事务环境(反模式)。
      ATOMIC_REQUESTS = True
    • 使用事务装饰器(简单易用)-粗粒度(控制不够精细)。
      @transaction.non_atomic_requests @transaction.atomic
    • 使用上下文语法(细粒度-事务控制的范围更加精确)。
with transaction.atomic()
  pass
  • 关闭自动提交使用手动提交。
    AUTOCOMMIT = False
    transaction.commit()
    transaction.rollback()

事务 - 锁进制 - InnoDB - 表级锁/行级锁 - 共享锁、排他锁
我们通过设置事务隔离级别让数据库自动选择合适的锁来保护数据
Authentication / Authorization
两种方式:RBAC(基于角色的访问控制) / ACL(访问控制列表)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、事务 1、事务四要素:ACID 对于事务,我之前的理解是很粗糙的,不就是为了保证操作的原子性么?一般订单系统或...
    张伟科阅读 5,169评论 0 5
  • 为了充分发挥MySQL的性能并顺利地使用,就必须理解其设计。MySQL的灵活性体现在很多方面。例如,你可以通过配置...
    李文文丶阅读 4,968评论 0 4
  • 当一个系统访问量上来的时候,不只是数据库性能瓶颈问题了,数据库数据安全也会浮现,这时候合理使用数据库锁机制就显得异...
    初来的雨天阅读 8,934评论 0 22
  • 导语:计算机硬件在飞速发展,数据规模在急速膨胀,但是数据库仍然使用是十年以前的架构体系,WiredTiger 尝试...
    isgiker阅读 8,737评论 0 7
  • MySQL 事务的四种隔离级别 1 事务的基本要素(ACID) 原子性(Atomicity):事务开始后所有操作,...
    4a873e424089阅读 3,813评论 0 0