每周精选(2018-09-02)

2018-09-02  本文已影响0人  Aaaaaaaron

最近整理资料的一些感悟,越是深入的知识,能够找到的资料就越少、越零散,可能还是有问题的。而官方的资料虽然都有明确定义,但是有时候在理解上并不能给人直观的理解。所以我在整理的时候,尽量用我理解的方式来解释,避免“官话”、“套话”,让读的人能有不同的角度理解。如果理解有误,欢迎提出指正。

[原创] Google 《SRE》(1-5章读书笔记)

https://www.jianshu.com/p/b7c2ecc28ea5

虽然书本概念偏多,但是可以看出是来源于实际工作中的例子,比起单讲理论或者工具的书来说,对运维领域的工程师有颇大的指导意义。—— 至少这本书展示了运维领域一些有挑战性的工作,让运维工作变得更加有趣一点。

Python 异步编程和 IO 多路复用的关系

在 Linux 中,Python3 中的异步编程 async/await 的实现其实是基于 selector 来完成,从本质上来说是 IO 多路复用的一种封装,不过这种封装能够统一 Selector 模式和 Proactor 模式,使上层不再需要关心底层的实现,在使用上,只要知道是 IO 是“异步”执行的即可。

但是如果要严格根据《Unix 环境编程》第六章的定义,IO 多路复用本质上也是同步IO 的一种,所以 Python 的 asyncio 在 Linux 的实现若按这个解释就算不上是异步 IO。很多网上的文章会把 IO 多路复用都说成异步 IO 也有一定的理解偏差,不过总的来说,这个理解的偏差对编程似乎没有太多影响。

https://docs.sqlalchemy.org/en/latest/orm/session_state_management.html#session-object-states

MySQL 事务及事务隔离级别

关于事务的前因后果:

因为有并发操作的需求 ---> 需要事务 ---> 事务需要满足 ACID ---> 隔离性 Isolation 又分为不同的隔离级别----> 隔离级别的实现方式:悲观锁、时间戳(乐观锁)、MVCC

https://draveness.me/mysql-transaction

SQLAlchemy 与 MySQL 事务

SQLAlchemy 中 session 是一个数据库的连接会话,session 中的操作可以类比 MySQL 中的事务操作,最终是要 commit 才算。一个 ORM 实例(类比MySQL 中的行数据)有5个状态:Transient, Pending, Persistent, Deleted, Detached。

简单说明是当一个ORM实例在 SQLAlchemy 中初始化是时 Transient,在 session 中被修改时,处于 Pending 状态,这个时候 MySQL 还是无感知的。只有当使用了 session.flush() 函数之后,会变成 persistent 状态,在 MySQL 中相当于在一个事务中提交了 SQL 修改,但是还没有 commit 提交。只有执行了session.commit()时,才算是真正的完成一个事务。

flush() 和 commit() 对于实例的状态都是 persistent,但是只有commit()之后,才算是在数据库中最终完成,commit()之前的数据即使被 flush() 仍然能够被rollback()。

关于实例状态的具体说明可以查看官方链接

在 SQLAlchemy 中,每一次 query 和 commit之前都会自动进行一次 flush,以保证数据被写到数据库中。如果要修改这个默认配置,可以把 session 的 autoflush 设置为 False 即可。

这方面没有找到太好的文章,下面这篇可以凑合看下。

https://blog.csdn.net/u010900754/article/details/77145865

上一篇下一篇

猜你喜欢

热点阅读