Monthly Archives: December 2009

《深入浅出MySQL》读书拾遗-优化

在MySQL中,数据库对应操作系统下的数据目录。数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,这取决于存储引擎)。因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。 列、索引、存储子程序和触发器名在任何平台上对大小写不敏感。默认情况下,表别名在UNIX中对大小写敏感,但在Windows或Mac OS X中对大小写不敏感。在MySQL中如何在硬盘上保存、使用表名和数据库名由lower_case_tables_name系统变量决定,可以在启动mysqld时设置这个系统变量。 MySQL客户端连接成功后,通过show [session|global] status命令可以提供服务器状态信息,也可以在操作系统上使用mysqladmin extended-status命令获得这些消息。 “show status like ‘Com_%s’;”可以显示当前session中所有统计参数的值。其中Com_xxx表示每个xxx语句执行的次数,如Com_select(执行select操作的次数,一次查询只累加1)、Com_insert(执行insert操作的次数,对于批量插入的insert操作,只累加一次),还有Com_update/Com_delete/Innodb_rows_read/Innodb_rows_inserted/Innodb_rows_updated/Innodb_rows_deleted等等,通过这些参数可以了解到当前数据库的应用是以插入更新为主还是以查询操作为主,以及各种类型的SQL大致的执行比例是多少。 对于事务型的应用,通过Com_commit和Com_rollback可以了解事务提交和回滚的情况,对于回滚操作非常频繁的数据库,可能意味着应用编写存在问题。 Connections(试图连接MySQL服务器的次数),Uptime(服务器工作时间),Slow_queries(慢查询的次数)这三个参数也可以帮助用户了解数据库的基本情况。 通过慢查询日志定位那些执行效率较低的SQL语句,用–log-slow-queries=[file_name]选项启动时,mysqld写一个包含所有执行时间超过long_query_time秒的SQL语句的日志文件。 通过show processlist命令可以查看当前MySQL在进行的线程,包括线程的状态、是否锁表等,可以实时地查看SQL的执行情况,同时对一些锁表操作进行优化。 通过explain分析低效的SQL的执行计划 MySQL中索引的存储类型目前只有支持两种,具体和表的存储引擎相关:MyISAM和InnoDB存储引擎都只支持BTREE索引;MEMORY/HEAP存储引擎可以支持HASH和BTREE索引。 查询要使用索引最主要的条件是查询条件需要使用索引关键字,如果是多列索引,那么只有查询条件使用了多列关键字最左边的前缀时,才可以使用索引,否则将不能使用索引。

Posted in MySQL | Leave a comment

《JavaScript语言精髓与编程实践》读书拾遗-非函数式语言特性

变量的生存周期是指它何时被创建和被释放。在JavaScript中,一个变量的创建是在:引擎做语法分析时,发现显式声明;引擎做代码执行,发现试图写(例如赋值)一个未被创建的变量时。而变量的释放则是在:引擎执行到函数结束/退出操作时,将清除函数内的未被引用的变量;引擎执行到全局的代码块终结或引擎卸载和重载入时,将清除全局的亦是和数据的引用。 变量作用域讨论的是“在形式上这个变量能在哪个范围内存取到”。 对于具名函数的声明来说,抛开语法解析导致的问题不讲,一个具名函数是完全等同于一个匿名函数赋值给一个已经声明的变量标识符。 在JavaScript中,“空对象(null)“是作为一个保留字存在的。null不是“空的对象”,而是代表这样的一个对象:属性对象类型;对象是空值的。因为它是对象类型,所以用(typeof null)会返回object,甚至可以用for…in…去列举它,只不过因为它是空值,所以没有任何方法和属性,因而列举不到内容。 所谓“空的对象”,是一个标准的、通过Object()构造的对象实例,即通过obj = new Object();或者obj = { };空的对象具有“对象”的一切特性,可以存取预定义属性和方法(toString、valueOf等)。 对象只有“构造自某个原型”的说法,而不存在“持有(或拥有)某个原型”的说法。原型其实也是一个对象实例。原型的含义是指:如果构造器有一个原型对象A,则由该构造器创建的实例都必然复制自A。 JavaScript在构造对象的时候,采用的是读遍历的机制,即把写复制的粒度从原型变成了成员。这种方法的特点是:仅当写某个实例的成员时,将成员的信息复制到实例的的映像中,而并不是在刚构造时就从原型中复制全部成员。 在读遍历的机制下,所有的对象实例需要维护一张成员列表,这个成员列表指向在对象实例中发生了修改的成员名、值与类型。这张表是否与原型一致并不重要,只需要遵循两条规则:保证在读取时首先被访问到;如果在对象中没有指定属性,则尝试遍历对象的整个原型链,直到原型为空(null)或找到该属性。存取实例中的属性,比存取原型中的属性效率要高,因为少了一个指针访问。 实例创建后constructor属性总先被赋值为当前函数,当用delete删除constructor属性时,constructor则会指向父类的函数。

Posted in JavaScript | Leave a comment

《JavaScript语言精髓与编程实践》读书拾遗-JavaScript语法

JavaScript的6种基本数据类型undefined(未声明的变量,或者声明过但未赋值的变量的值,会是undefined。也可以显式或隐式地给一个变量赋值为undefined),string(不能直接读取或修改字符串中的单一字符),number,boolean,function,object。 NaN值,与自身并不等值,也不全等。 在早期Netscape的JavaScript中允许出现非Unicode字符,但现在ECMA标准统一要求JavaScript中的字符串必须是Unicode字符序列。 当一个直接量被识别为十进制整数时,它内部的存放格式可能是浮点数,也可能整型数,这取决于不同引擎的实现,因此不能指望JavaScript中的整型数会有较高的运算性能。 通过rx=/abcd\n\r/gi的直接量方式创建正则表达式对象,其中的转义字符是不能自动转义的,但通过rx=new RegExp(“abcd\n\r”,”gi”)的字符串创建正则表达式对象方式,其中的转义字符则会被自动转义,因此要在字符串中增加转义字符rx=new RegExp(“abcd\\n\\r”,”gi”)。 JavaScript中单词形式的运算符:typeof(取变量或值的类型)、void(运算表达式并忽略值,运算返回undefined)、new(创建指定类的对象实例)、in(检查对象属性)、instanceof(检查变量是否指定类的实例)、delete(删除实例属性)。 “===”和”!==”比较两个表达式,看是否具有相等的值或相同的数据类型。 JavaScript中,赋值是一个运算,而不是一个語句。 JavaScript中只有一种方法来完成函数调用,即在函数后紧临函数调用运算符”()”,这个运算符被解释为两个含义:使函数得以执行;从左到右运算并传入”( )”内的参数序列。 当語句位于以下几种情况之一时,可以省略分号:一个文本行或整个文本文件的末尾;在語法分隔符之前(如复合語句的大括号”}”);在复合語句的大括号”}”之后。 語句的返回值由最后的一个子句或表达式的值决定,即使不返回值,也会返回undefined。 没有引用的匿名函数调用方法(1):(function() { /*func body*/}()); 此为用强制运算符使函数调用运算得以执行。

Posted in JavaScript | Leave a comment

《深入浅出MySQL》读书拾遗-基础开发

一、    MySQL入门 DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象。常用的语句关键字主要包括create、drop、alter等。 DML(Data Manipulation Languages)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据库完整性。常用的语句关键字主要包括insert、delete、update和select等。 DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括grant、revoke等。 change和modify都可以修改表的定义,不同的是change后面需要写两次列名,不方便。但是change的优点是可以修改列名称,modify则不能。

Posted in MySQL | Leave a comment

初识CDN

=====先声明一下,以下内容都是从互联网中总结而得来的===== CDN的全称是Content Delivery Network,即内容分发网络。其上的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就取得所需内容,解决Internet网络拥挤的状况,提高用户访问网站的响应速度。网站的内容提供商(比如网易、新浪、搜狐等等)使用CDN,就可以在宏观层解决一部分大流量、海量用户并发等令人头疼的问题。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均 等原因所造成的用户访问网站响应速度慢的问题。通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。 CDN的基本运作原理是:CDN服务提供商在全国各地的很多CDN节点部署了大量的边缘服务器,当内容提供商(比如网易、新浪、搜狐等等)使用CDN服务的时候要把加速的域名CNAME到CDN服务提供商的CDN网络中,然后将内容提供商的内容缓存或镜像到这些边缘服务器上,当终端用户访问这些加速网站时,通过先进的智能DNS将用户访问解析到离终端用户最近的最可靠的边缘服务器上,实现就近访问,从而加速访问速度,提升用户的访问体验。

Posted in Web | Leave a comment