Changes between Version 13 and Version 14 of standard


Ignore:
Timestamp:
05/10/2012 06:17:59 PM (14 years ago)
Author:
wanganning
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • standard

    v13 v14  
    651651}}} 
    652652 
     653==== TODO jsp,控制层 ==== 
     654 
    653655 ==== Json输出 ====  
    654 所有的Json输出都要用org.json包里面的类包装,不允许直接拼字符串方式输出。 
     656所有的Json输出都要用net.sf.json包里面的类包装,不允许直接拼字符串方式输出。 
    655657 
    656658= 数据库设计 = 
     
    665667* 没有功能性作用,只为管理和维护方便而设的id,可以使用全称的形式,也可只将其命名为id。 
    666668所有与表、字段相关的命名,请务必大量参考现有字段的命名方式,以保证命名的系统性和统一性。 
     669* 表名前加跟应用相关的前缀如bbs6_forum。 
    667670 
    668671=== 字段结构 === 
     
    697700* 变长表到定长表的转换,不能只转换一个可变长字段,必须对它们全部进行转换。而且必须使用一个ALTER TABLE语句同时全部转换,否则转换将不起作用; 
    698701* 有时不能使用定长类型,即使想这样做也不行。例如对于比255字符更长的串,没有定长类型; 
    699 * 在设计表结构时如果能够使用定长数据类型尽量用定长的,因为定长表的查询、检索、更新速度都很快。必要时可以把部分关键的、承担频繁访问的表拆分,例如定长数据一个表,非定长数据一个表。例如Discuz!的cdb_members和cdb_memberfields表、cdb_forums和cdb_forumfields表等。因此规划数据结构时需要进行全局考虑; 
     702* 在设计表结构时如果能够使用定长数据类型尽量用定长的,因为定长表的查询、检索、更新速度都很快。必要时可以把部分关键的、承担频繁访问的表拆分,例如定长数据一个表,非定长数据一个表。因此规划数据结构时需要进行全局考虑; 
    700703进行表结构设计时,应当做到恰到好处,反复推敲,从而实现最优的数据存储体系。 
    701704=== 运算与检索 === 
     
    706709索引能加快查询速度,而索引优化和查询优化是相辅相成的,既可以依据查询对索引进行优化,也可以依据现有索引对查询进行优化,这取决于修改查询或索引,哪个对现有产品架构和效率的影响最小。 
    707710索引优化与查询优化是多年经验积累的结晶,在此无法详述,但仍然给出几条最基本的准则。 
    708 首先,根据产品的实际运行和被访问情况,找出哪些SQL语句是最常被执行的。最常被执行和最常出现在程序中是完全不同的概念。最常被执行的SQL语句,又可被划分为对大表(数据条目多的)和对小表(数据条目少的)的操作。无论大表或小表,可分为读(SELECT)多、写(UPDATE/INSERT)多或读写都多的操作。 
     711首先,根据产品的实际运行和被访问情况,找出哪些SQL语句是最常被执行的。最常被执行和最常出现在程序中是完全不同的概念。最常被执行的SQL语句,又可被划分为对大表(数据条目多的)和对小表(数据条目少的)的操作。无论大表或小表,可分为读(SELECT)多、写(UPDATE/INSERT)多或读写都多的操作。 
    709712对常被执行的SQL语句而言,对大表操作需要尤其注意: 
    710 * 写操作多的,通常可使用写入缓存的方法,先将需要写或需要更新的数据缓存至文件或其他表,定期对大表进行批量写操作,例如Discuz!中点击数延迟更新机制,就是依据此原理实现。同时,应尽量使得常被读写的大表为定长类型,即便原本的结构中大表并非定长。大表定长化,可以通过改变数据存储结构和数据读取方式,将一个大表拆成一个读写多的定长表,和一个读多写少的变长表来实现; 
     713* 写操作多的,通常可使用写入缓存的方法,先将需要写或需要更新的数据缓存至文件或其他表,定期对大表进行批量写操作,例如点击数延迟更新机制,就是依据此原理实现。同时,应尽量使得常被读写的大表为定长类型,即便原本的结构中大表并非定长。大表定长化,可以通过改变数据存储结构和数据读取方式,将一个大表拆成一个读写多的定长表,和一个读多写少的变长表来实现; 
    711714* 读操作多的,需要依据SQL查询频率设置专门针对高频SQL语句的索引和联合索引。 
    712715 而小表就相对简单,加入符合查询要求的特定索引,通常效果比较明显。同时,定长化小表也有益于效率和负载能力的提高。字段比较少的小定长表,甚至可以不需要索引。