更少的数据库 (理想情况下是一个)
规范化,减少冗余数据
一个“好的”数据库设计
ACID 事务
更多的数据约束
多个数据库
冗余或非正规化数据
糟糕的数据库设计
较少(或没有)数据约束
你们把流程图给我看,但把表藏起来,我就一头雾水。你们把表给我看,通常我就不需要你们的流程图,它们会不言自明。—— Fred Brooks
糟糕的程序员关心代码。好的程序员关心数据结构和它们之间的关系。—— Linux 之父 Linus Torvalds
试图构建一个复杂的“可伸缩”系统,可以伸缩到你可能永远都不需要的规模。
在不考虑需求或成本的情况下,让服务尽可能地小。
在非性能瓶颈的地方优化性能,增加不一致性或复杂性。
尽可能从最简单、最正确的系统开始
对性能进行度量
如果不能解决实际问题,就不要付出复杂性代价或违反其他原则。
有些优化可以不进行度量,因为它们的成本非常低或为零。例如,为了保证你想要执行的操作具有你想要的性能,使用正确的数据结构。
的确,有时候经验本身就能告诉你是否做出了正确的权衡。但如果你能证明,那就更好了。
当你必须做出选择时,请选择正确性和简单性,而不是性能。
在某些情况下,正确而简单的代码是性能最好的代码!
真正的问题是程序员在错误的地方和错误的时间花了太多的时间在担心效率上。过早优化是编程中所有(或者至少是大部分)罪恶的根源。——计算机科学家 Donald Knuth
纯函数式编程
关系型模型
规范的方法
逻辑编程
代数数据类型
类型类 (通用的和特定的)
借位检查器 (仿射 / 线性类型)
依赖类型
Curry-Howard 同构
宏
同像性(Homoiconicity)
VirtualDOM
线性回归
......
如果你的系统处于这些状态中的一种,你应该使用哪个值?
当处于其中的一种状态时,“toggle”函数的行为是怎样的?
在写入新值时,如何确保两次写入都成功?

点个在看少个Bug

