问题场景
在本地使用 docker 启动了一个 mysql 容器,并把本地的33067
端口映射到容器内 mysql 的 3306
,我们假设容器的 ip 地址是 172.17.0.2
,使用本地的 mysql 客户端尝试连接容器内部的 mysql 服务。
拆表是一种常见的解决单表数据库瓶颈的方案,在实际的应用场景中能够部分解决单表的写压力和读压力,但是也会带来一些更复杂的影响:
因此,表的拆分一定要选在恰当的时候进行,过早,付出很大代价也并不会带来性能的提升,过晚,数据量庞大,操作难度加大。
在本次实施的拆分方案中,数据特点是:
wiki:In computer science, a lock or mutex (from mutual exclusion) is a synchronization mechanism for enforcing limits on access to a resource in an environment where there are many threads of execution. A lock is designed to enforce a mutual exclusion concurrency control policy.
在计算机科学中,锁或互斥量是一种同步机制,用于在多线程执行环境中,强行限制对资源访问。锁常被用于同步并发控制。
简单来讲,锁是用来控制多线程执行对资源的并发访问的。比如当一个资源只允许在任意时刻只有一个执行线程对其进行写操作,那当其他线程要访问资源时,就必须要检查该该资源上是否存在写操作锁
,如果存在,必须要等待锁的释放并获得锁之后才能对资源进行访问。
turbo 与其说是一个 framework ,不如说是一个后端的解决方案。
tornado 是异步非阻塞的 web 服务器,同时也是一个 web framework,功能简单但完全够用。
原东家的技术栈是:tornado、mongodb、redis、openresty,最大的服务每天服务的独立用户有上百万。早期大部分项目完全使用 tornado 最原始的方式构建,一个 main 文件包含几百个路由,所有的 handler 分布在十几个大大小小的文件夹下面,项目基本的文件结构包含:
随着项目的代码越来越多,多个特性开发常常同时进行,开发人员经常要非常小心地应对代码的更改,即使如此,冲突依然时常发生,代码的可维护性和健壮性日益变差。
创业公司由于业务面临飞速增长,多条业务线齐头并进,开发团队往往要同时维护很多个项目,有的项目生命周期很短,一次活动就结束了,有的项目要对外合作,随合作的结束而结束,有的项目服务新的产品,需要快速构建。不同的项目由不同的开发人员创建,创建项目的方式基本是 copy 旧项目,比较原始,容易出错。项目结构在不同的项目之间的差异随着业务的不同,差别渐渐凸显,重复的功能性代码和工具性代码也逐渐变多。
为了让一个对象发生改变时不对原对象产生副作用,此时,需要一份这个对象的拷贝,python 提供了 copy 机制来完成这样的任务,对应的模块是 copy。
在 copy
模块中,有 copy
函数可以完成浅拷贝。1
from copy import copy
在 python 中,标识一个对象唯一身份的是:对象的id
(内存地址),对象类型,对象值,而浅拷贝就是创建一个具有相同类型,相同值但不同id
的新对象。
对可变对象而言,对象的值一样可能包含有对其他对象的引用,浅拷贝产生的新对象,虽然具有完全不同的id
,但是其值若包含可变对象,这些对象和原始对象中的值包含同样的引用。
1 | >>> import copy |
可见浅拷贝产生的新对象中,可变对象的值在发生改变时会对原对象的值产生副作用,因为这些值是同一个引用。
在开始之前,先看一组 github 数据
ember.js
https://github.com/emberjs/ember.js
angular.js
https://github.com/angular/angular.js
vue.js
react.js
https://github.com/facebook/react
riot.js
注: 统计时间为本文编写之时
emberjs 和其他同类框架一样,至少在 github 的 表现足以证明其流行度是不低的,但各个框架的诞生的场景以及解决的问题又不尽相同。
emberjs 是基于 jquery 的一个全栈式前端框架,它提供了从路由层-> view 层->数据和网络交互层的全部解决方案,只用 emberjs 就足以解决前端单页应用遇到的所有复杂问题,而且兼具有不俗的开发效率和开发质量。
模块, 一个 py
文件或以其他文件形式存在的可被导入的就是一个模块
包,包含有 __init__
文件的文件夹
相对路径,相对于某个目录的路径
绝对路径,全路径
python 解释器查找被引入的包或模块
Python 执行一个 py 文件,无论执行的方式是用绝对路径还是相对路径,interpreter 都会把文件所在的 directory 加入 sys.path 这个 list 中,Python 就是在 sys.path 中查找包和模块的,sys.path 中的内容本身又是又 Python 的环境变量决定。
没有一点儿疯狂,生活就不值地过,同样,没有一件自己的艺术品,程序人生就是不完整的
我不是一个善于总结的人,因为看着自己的过去,就如同对着镜子不断检视自己犯得错误,数落那曾经的幼稚和愚蠢,徒增懊恼。
但是掺杂程序的人生却必须不断地审视,重构,一旦对bug恣意放纵,不管不问,这样的人生必将坎坷不断,难以运转。
所以这算是一篇象征性的总结,对某一段程序人生的重构和梳理,为的是让自己不至于看得不明不白,将来别人接管时,也能一目了然,这是对程序人自己起码的要求,也是对别的程序人起码的尊重。
我原以为可以用代码写诗,但是敲出来的只是烦躁和不安