以产品为中心的网站URL
作者:老王
以产品为中心的网站URL
URL设计是个很有讲究的问题,很多网站在这方面显得过于随意。
比如说我们有一个照相机网站,数据库里保存着canon 550d,其id是123,那举一个不好的例子:
http://www.foo.com/pictures/123.html
http://www.foo.com/comments/123.html
为什么说这些URL不好,看看下面的URL设计:
http://www.foo.com/123/pictures
http://www.foo.com/123/comments
这样就好多了,为什么这么说呢,因为对一个产品网站来说,产品是中心,URL的设计无疑应该以产品为中心来设计,而且URL本身就是有层次的,所以善用这种层次就会让网站URL更有条理性。否则如开始那样设计URL就变成以功能为中心来设计URL了,而不是以产品为中心。
不过我们还能做得更好,比如:
http://www.foo.com/canon/550d/pictures
http://www.foo.com/canon/550d/comments
抛弃id这种索然无味的标识符,采用更具语义的品牌名字和型号名字,会得到更友好的URL。
因为这样更有层次感:canon品牌中550d型号的图片(评论),不管是对浏览者而言,还是对搜索引擎而言,这种层次感都更简单易懂。
URL设计相关文章:
关于 URL 的一些不可不知的知识
Guidelines for URI Design
Write mysqlnd plugins in PHP
这算是最近最Coooool的一个新闻了,借助一个PECL扩展mysqlnd_uh,用PHP写Mysqlnd插件,不再有C语言门槛,这意味着你可以用PHP代码实现类似MySQL Proxy的功能,非常有诱惑力。详细信息参见PHP @ FrOSCon: the power of mysqlnd plugins。
MySQL衍生版本
1:Percona Server
2:MariaDB
3:Drizzle
MySQL按时间点还原
如果是通过mysqldump备份备份的话,以InnoDB为例,命令大概如下:
mysqldump --all-databases --single-transaction --flush-logs --master-data=2 ...
这里的master-data很重要,这样可以在备份文件里生成类似下面的语句:
CHANGE MASTER TO MASTER_LOG_FILE='...',MASTER_LOG_POS=...;
在还原的时候,就可以通过MASTER_LOG_FILE和MASTER_LOG_POS确定二进制日志的起始位置:
mysqlbinlog --start-date=... --stop-date=...
命令里的flush-logs也是必要的,这样可以生成新的日志文件,查找起来就方便多了。
注意:flush-logs有副作用,如果你没有做好错误日志的备份,那么多次flush-logs后,错误日志会丢失。
Linux下查看硬盘信息
dmesg命令结果里有硬盘信息,但是太乱了,不容易查看。
如果是SCSI硬盘:
# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: MAXTOR Model: ATLAS10K5_147SAS Rev: BMU6
Type: Direct-Access ANSI SCSI revision: 05
Host: scsi1 Channel: 00 Id: 00 Lun: 00
Vendor: TEAC Model: DVD-ROM DV28SV Rev: D.0J
Type: CD-ROM ANSI SCSI revision: 05
如果是IDE硬盘,估计很少有网站会用,但记一下命令也是值得的:
# find /proc/ide/ide[0-9]/hd? -type f -name model -exec cat {} \;
经过网友提示,还有一个smartctl命令可以查看硬盘信息:
# smartctl -i /dev/sda
smartctl version 5.38 [x86_64-redhat-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
Device: MAXTOR ATLAS10K5_147SAS Version: BMU6
Serial number: J4H05LFK
Device type: disk
Transport protocol: SAS
Local Time is: Mon Aug 23 11:05:50 2010 CST
Device does not support SMART
MySQL与GUID(UUID) COMB
在这里,我把GUID,UUID两个名词看做一样的东西,都是指一个唯一ID。
GUID(UUID)大家并不陌生,但是GUID COMB就不是很常见了。最初的概念由Jimmy Nilsson提出。先看看GUID(UUID),在MySQL里多数人似乎不喜欢使用它,主要原因在于InnoDB的影响:
1:InnoDB是聚集主键,也就是说数据要按照主键物理排序,由于GUID(UUID)的无序性,会打来巨大的磁盘IO操作。
2:InnoDB中非主键索引都包含主键,GUID(UUID)本身都很长,所以索引也会变大。
其中主要瓶颈集中在第一个问题上,至于第二个问题,还可以忍受。
正是为了解决第一个问题,于是出现了GUID(UUID) COMB,对于COMB类型的GUID(UUID)来说,它在保持唯一性的前提下,并不是完全无序的,大体上有一定的顺序性,如此一来就避免了巨大的磁盘IO。
MySQL本身有一个UUID函数,例子如下:
mysql> SELECT UUID();
603fd892-adec-11df-b4c2-676ff78bcf6c
61d8f29b-adec-11df-b4c2-676ff78bcf6c
多执行几次会发现MySQL UUID函数本身有一定的顺序性,但这种顺序性有限,重启服务之类的操作还会影响它。
网上到处搜索了一下,最后才发现MySQL下似乎现在还没有众所周知的GUID(UUID)COMB方案。
http://hi.baidu.com/thinkinginlamp/item/b20a4fddf70b40e955347f11
评论

React 18的并发渲染确实是个重大改进,我们在项目中已经升级使用,性能提升明显!