最新 | 最热门 | 最高评价

+0  EAV or JSON

Tag: Technical | MySQL
老王 发于 2016年06月29日 20:18 | 点击: 209 | 展开摘要
MongoDB 之类的 NoSQL 之所以流行,很大程度上取决于相对自由的 schema 设计,不管数据量多大,可以随时在线上环境添加新字段来保存新数据,而这种能力恰恰是传统的关系数据库所欠缺的,不过别担心,传统关系数据库有自己的应对之道。我们今天就讨论一下其中最具代表性的两种方法,看看孰优孰劣。

在讨论前,我们不妨虚拟一个业务场景:假设我们要做一个类似汽车之家的产品库,首当其冲的是如何保存汽车的各种属性,比如说:长度、宽度、高度、GPS 导航系统、倒车影像、上坡辅助、陡坡

查看全文: http://www.udpwork.com/item/15964.html

+0  如何正确发布PHP代码

Tag: Technical | PHP
老王 发于 2016年05月27日 20:47 | 点击: 228 | 展开摘要
几乎每一个 PHP 程序员都发布过代码,可能是通过 ftp 或者 rsync 同步的,也可能是通过 svn 或者 git 更新的。一个活跃的项目可能每天都要发布若干次代码,但是现实却是很少有人注意其中的细节,实际上这里面有好多坑,很可能你就在坑中却浑然不知。

一个正确实现的发布系统至少应该支持原子发布。如果说每一个版本都表示一个独立的状态的话,那么在发布期间,任何一次请求只能在单一状态下被执行。如此称之为支持原子发布;反之如果在发布期间,一次请求跨越不同的状态,那么就不能称

查看全文: http://www.udpwork.com/item/15965.html

+0  PostgreSQL Partial Index

Tag: Technical | PostgreSQL
老王 发于 2016年04月28日 16:50 | 点击: 171 | 展开摘要
说起「Partial Index」,估计很多人没听说过。在 PostgreSQL 中,它的含义是指:通过查询条件索引选定的行,而不是所有的行。虽然 MySQL 也有此概念,但是其更接近前缀索引的含义:比如你想索引一个 VARCHAR(255) 的字段,根据数据分布情况,你可以仅索引前面若干个字符,如此通过降低索引体积来达到提升性能的目的。

例一:

有一个 users 表,里面有一个 mobile 字段,缺省值为 null。用户可以不填写手机号,如果填写,每个手机号只能关联

查看全文: http://www.udpwork.com/item/15966.html

+0  被黑了

Tag: Technical | Linux
老王 发于 2016年03月07日 19:18 | 点击: 163 | 展开摘要
话说从前些天开始,我的某台服务器不时会出现外网访问响应速度变慢的情况,不过内网访问倒是一直正常。因为并不是核心服务器,所以一开始我便忽略了监控报警,但是随着服务器的可用性越来越差,我不得不腾出手来看看到底发生了什么。

既然是网络问题,那么可以在客户端用「mtr <IP>」检查一下网络情况:

mtr

发现丢包主要发生在最后一跳,接着可以在服务器用「sar -n DEV」检查带宽:

sar

明显可见 TX 流量时不时便会到达一定的高峰,说明服务器在向外发送大

查看全文: http://www.udpwork.com/item/15967.html

+0  记几个常见的Laravel报错

Tag: Technical | PHP
老王 发于 2016年02月29日 18:17 | 点击: 244 | 展开摘要
我已经用了一段时间的 Laravel 框架了,期间遇到了不少问题,有一些调试起来着实不太容易,本文筛选出几个,如果能让大家少走一些弯路,那我就算没白写。

报错:「Can’t swap PDO instance while within transaction」

通过查询 Laravel 源代码,可以确认异常是在 setPdo 方法中抛出的:

<?php

public function setPdo($pdo)
{
if ($this->

查看全文: http://www.udpwork.com/item/15968.html

+0  浅谈CLOSE_WAIT

Tag: Technical | Linux | TCP
老王 发于 2016年01月19日 20:19 | 点击: 193 | 展开摘要
TCP 有很多连接状态,每一个都够聊十块钱儿的,比如我们以前讨论过 TIME_WAIT 和 FIN_WAIT1,最近时不时听人提起 CLOSE_WAIT,感觉有必要梳理一下。

所谓 CLOSE_WAIT,借用某位大牛的话来说应该倒过来叫做 WAIT_CLOSE,也就是说「等待关闭」,如果你还不理解其含义,可以看看 TCP 关闭连接时的图例:

TCP Close

不要被图中的 client 和 server 所迷惑,你只要记住:主动关闭的一方发出 FIN 包,被动关闭的一

查看全文: http://www.udpwork.com/item/15969.html

+0  PgBouncer in action

Tag: Technical | PostgreSQL
老王 发于 2015年12月29日 17:05 | 点击: 153 | 展开摘要
原本我是 MySQL 的忠实粉丝,后来命运使然,接手了一个 PostgreSQL 项目,一边用一边学,遇到了不少问题,本文说说其中的连接池问题。

有人曾经问我「为什么 PostgreSQL 没有 MySQL 流行呢?」,我说是因为 PostgreSQL 没有服侍好 PHP。当然话有戏谑的成分在,不过仔细想想也不无道理,开发那些简单的增删改查程序,PHP 和 MySQL 是绝配,而 PHP 和 PostgreSQL 则明显不搭,其中最重要的一点是:PostgreSQL 连接是

查看全文: http://www.udpwork.com/item/15970.html

+0  Dependency Injection 和 Service Locator

Tag: Technical | PHP
老王 发于 2015年11月11日 17:16 | 点击: 178 | 展开摘要
如果说学院派的 Java 程序员骨子里都浸淫着学究范儿的话,那么游击队出身的 PHP 程序员则从头到脚洋溢着乡土气息。通常他们不太在意理论,一切以实现为先,虽然这样的做法在项目早期能获得不错的收益,但是随着项目的推进,复杂度的提升,缺乏理论基础的弊端终将显现。好在 PHP 社区没有裹足不前,比如说十几年前 Java 社区中流行的 IoC 概念,最近一两年终于被 PHP 社区所接纳。

说起 IoC,其实是 Inversion of Control 的缩写,翻译成中文叫控制反转

查看全文: http://www.udpwork.com/item/15971.html

+0  聊聊代码的割裂感

Tag: Technical | PHP
老王 发于 2015年11月05日 20:01 | 点击: 157 | 展开摘要
早些年,我特别喜欢下围棋,每天都会下几盘。那时候日本围棋不仅高手林立,而且风格迥异,比如:小林光一的地铁流,武宫正树的宇宙流等等,不过我最喜欢的棋手当属大竹英雄,他下棋时追求美感,如果棋形不漂亮,那么他宁可认输也绝不玷污棋盘。后来,我成为了一名程序员,每天都要写不少代码,可惜写了不少丑陋的代码,本文筛选了几个例子,希望大家看过之后都能写出更具美感的代码来。

在聊之前,我们不妨想想割裂到底是什么意思。其实所谓割裂,说白了就是指把原本应该在一起的东西分开了,比如两地分居的夫妻,

查看全文: http://www.udpwork.com/item/15972.html

+0  手把手教你用Strace诊断问题

Tag: Technical | Linux | Strace
老王 发于 2015年10月16日 14:22 | 点击: 171 | 展开摘要
早些年,如果你知道有个 strace 命令,就很牛了,而现在大家基本都知道 strace 了,如果你遇到性能问题求助别人,十有八九会建议你用 strace 挂上去看看,不过当你挂上去了,看着满屏翻滚的字符,却十有八九看不出个所以然。本文通过一个简单的案例,向你展示一下在用 strace 诊断问题时的一些套路。

如下真实案例,如有雷同,实属必然!让我们看一台高负载服务器的 top 结果:

top

技巧:运行 top 时,按「1」打开 CPU 列表,按「shift+p」以

查看全文: http://www.udpwork.com/item/15973.html

+0  Unicode and UTF-8

Tag: Technical | PHP
老王 发于 2015年10月13日 21:12 | 点击: 152 | 展开摘要
绝大多数程序员都听说过 Unicode 和 UTF-8,但是清楚它们之间关系的人就不多了,关于这个问题,与其苍白的陈述它们的概念,不如举例子说明来得自然。

我前些天碰到一个需求:随机生成几个汉字。原本我便对编码之类的问题发怵,所以完全搞不清楚状况,无奈之下我便上网搜索了一个 PHP 版本的实现:

<?php

$zh = '';

for($i = 0; $i < 3; $i++) {
$zh .= '&#'. rand(19968, 4086

查看全文: http://www.udpwork.com/item/15974.html

+0  谈谈Redis的SETNX

Tag: Technical | Redis
老王 发于 2015年09月14日 22:23 | 点击: 170 | 展开摘要
在 Redis 里,所谓 SETNX,是「SET if Not eXists」的缩写,也就是只有不存在的时候才设置,可以利用它来实现锁的效果,不过很多人没有意识到 SETNX 有陷阱!

比如说:某个查询数据库的接口,因为调用量比较大,所以加了缓存,并设定缓存过期后刷新,问题是当并发量比较大的时候,如果没有锁机制,那么缓存过期的瞬间,大量并发请求会穿透缓存直接查询数据库,造成雪崩效应,如果有锁机制,那么就可以控制只有一个请求去更新缓存,其它的请求视情况要么等待,要么使用过期的

查看全文: http://www.udpwork.com/item/15975.html
|<<<1234567>>>| 一共12页, 137条记录