tant 最近的时间轴更新
tant

tant

V2EX 第 475864 号会员,加入于 2020-03-11 10:57:47 +08:00
tant 最近回复了
2020-04-14 10:07:04 +08:00
回复了 dvaknheo 创建的主题 PHP [吐槽]刚读了 yii3-demo, PHP 框架是怎么把 PHP (优雅的)玩死的。
我个人理解的后端框架其实主要分三大部分
1 、orm:,因为我是从最早那批过来的,已经习惯手写 sql 了,所以这个我觉得可有可无,对于我来说。orm 只能简化数据插入和修改的操作

2 、路由和模板:这部分还是比较重要 业务逻辑部分都是必须的

3 、IoC 容器:高级的抽象,这部分 php 应该用不到

php 其实非常适合中小型项目,没有那么多的抽象和业务逻辑,所以 orm 和 ioc 这部分基本可以不要

我前几年做过几个 php 项目,就写了个简单的框架,自己用的非常好:
orm 直接用 pdo 代替,自己在封装一些 helper 函数,这样增删改查就方便了
路由部分我仿造 java 的注解,用反射获取 php 类的注释自动生成 rewrite 文件,也就相当于是自动路由了
模板也是直接用的 php 的语法直接 include 就可以了,不需要其他的第三方库
直接用 autoload 按照规则命名好文件后自动加载不仅自己看着方便,也算半个 ioc 了

因为用的不多,所以没觉得第三方框架有什么好,对于第三方框架我就觉得 Yaf 挺好的,哈
2020-03-19 11:11:43 +08:00
回复了 wangbenjun5 创建的主题 MySQL Mysql 数据库需不需要主键 Id?
mysql 的 innodb 是必须的,其他的数据库可以建议,我个人只对 MySQL 比较了解,供你参考:
InnoDB 引擎表是基于 B+树的索引组织表;
InnoDB 会选择主键作为聚集索引、如果没有显式定义主键,则 InnoDB 会选择第一个不包含有 NULL 值的唯一索引作为主键索引;
数据记录本身被存于主索引(一颗 B+Tree )的叶子节点上。这就要求同一个叶子节点内(大小为一个内存页或磁盘页)的各条数据记录按主键顺序存放,因此每当有一条新的记录插入时,MySQL 会根据其主键将其插入适当的节点和位置,如果页面达到装载因子( InnoDB 默认为 15/16 ),则开辟一个新的页(节点)

如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页;

如果使用非自增主键(如果身份证号或学号等),由于每次插入主键的值近似于随机,因此每次新纪录都要被插到现有索引页得中间某个位置,此时 MySQL 不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读回来,这增加了很多开销,同时频繁的移动、分页操作造成了大量的碎片,得到了不够紧凑的索引结构,后续不得不通过 OPTIMIZE TABLE 来重建表并优化填充页面;

以上是《高性能 MySQL 》中的原话

大概意思就是:InnoDB 表的数据写入顺序能和 B+树索引的叶子节点顺序一致的话,这时候存取效率是最高的,而主键可能不是递增关系时(例如字符串、UUID、多字段联合唯一索引的情况),该表的存取效率就会比较差。

所以一般 mysql 又用 innodb 的情况下一律加上自增 id,如果你说的两个表,B 表是 A 表的附属表,B 表的 ID 可以不设置自增,直接存 A 表的 ID 作为主键即可
2020-03-17 15:10:26 +08:00
回复了 rsonghao 创建的主题 Android 500 以下安卓二手机求推荐
红米 7A 狗东价 549 我上周刚买的
2020-03-17 15:08:54 +08:00
回复了 waibunleung 创建的主题 程序员 PHP 转 go 好还是继续深造?
我认识的 php 基本都转 go 了,但是其实你干几年就会发现,后端其实双修或者三修都可以的,最主要的不是语言,二十数据库和架构
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2643 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 11ms · UTC 11:05 · PVG 19:05 · LAX 03:05 · JFK 06:05
Developed with CodeLauncher
♥ Do have faith in what you're doing.