201504-01 构建高并发高可用的电商平台架构实践(一)——设计理念 空间换时间多级缓存,静态化客户端页面缓存(httpheader中包含Expires/CacheofControl,lastmodified(304,server不返回body,客户端可以继续用cache,减少流量),ETag)反向代理缓存应用端的缓存(memcache)内存数据库Buffer、cache机制(数据库,中间件等)索引哈希、B树、倒排、bitmap哈希索引适合综合数组的寻址和链表的插入特性,可以实现数据的快速存取。B树索引适合于查询为主导的场景,避免多次的IO,提高查... 继续阅读 >
201503-31 SQL Server 面面观——数据库对象 SQLServer2008包含许多对象,主要的数据库对象有:数据库、事务日志、表、模式、文件组、图表、视图、存储过程、用户自定义函数、用户和角色、规则、默认值、用户自定义数据类型、全文目录。一、数据库对象在SQLServer中,数据库服务器本身可以看作一个对象,大部分其他对象(但不是所有)为数据库对象的子对象。数据库通常至少包括一组表对象,一般也包括其他一些对象,如存储过程和视图。存储过程和视图与保存在数据库... 继续阅读 >
201503-23 创建数据库 创建一个名为TEST2的数据库,它有2个数据文件,其中主数据文件为100MB,最大大小为200MB,按20MB增长;1个辅助数据文件为20MB,最大大小不限,按10%增长;有2个日志文件,大小均为50MB,最大大小均为100MB,按10MB增长。 createdatabasedb_test2on ( name='test_data1', filename='D:\ProgramFiles(x86)\MicrosoftOffice\db_test2.mdf', size=5MB, &... 继续阅读 >
201503-17 MySQL服务器连接过程分析 mysqld是MySQL服务器端主进程,可以说mysqld是MySQL的真正核心,一切工作都是围绕mysqld进程进行的。所以要解剖mysql这个庞然大物,mysqld的代码是最好的突破口。一切都是从熟悉的main()函数开始的,其实是从mysqld_main()函数开始的。这些代码都在mysqld.cc。mysqld_main()随后调用了win_main)()。win_main()函数主要是做了一些初始化的工作。初始化工作完成之后,MySQL已经做好准备接受连接了。然后我们的主角Handle_connectio... 继续阅读 >
201503-16 压缩数据库日志 USE[databaseName]GO--将数据库设置为简单恢复模式,ALTERDATABASE [databaseName]SETRECOVERYSIMPLE;GO--压缩为100MDBCCSHRINKFILE([databaseName_log],100);GO--恢复ALTERDATABASE [databaseName]SETRECOVERYFULL;GO 继续阅读 >
201503-13 学习 MySQL 应该掌握的 6 个技巧 MySQL由于它本身的小巧和操作的高效,在数据库应用中越来越多的被采用。作为LAMP(或WAMP)开发中的重要一环,MySQL值得PHP开发者的重视和认真学习。1.每一行命令都是用分号(;)作为结束对于MySQL,第一件你必须牢记的是它的每一行命令都是用分号(;)作为结束的,但当一行MySQL被插入在PHP代码中时,最好把后面的分号省略掉,例如:mysql_query("INSERTINTOtablename(first_name,last_name)VALUES('$first_nam... 继续阅读 >
201503-11 10分钟学会理解和解决MySQL乱码问题 本文将详细介绍MySQL乱码的成因和具体的解决方案MySQL出现乱码的原因要了解为什么会出现乱码,我们就先要理解:从客户端发起请求,到MySQL存储数据,再到下次从表取回客户端的过程中,哪些环节会有编码/解码的行为。为了更好的解释这个过程,博主制作了两张流程图,分别对应存入和取出两个阶段。存入MySQL经历的编码转换过程上图中有3次编码/解码的过程(红色箭头)。三个红色箭头分别对应:客户端编码,MySQLServer解码,C... 继续阅读 >
201503-06 关于大型网站技术演进的思考(八):存储的瓶颈(8) 在开始本篇主要内容前,我们一起看看下面的几张截图,首先是第一张图,如下图所示:这是一家电商网站的首页,当我们第一次打开这个首页,网站会弹出一个强制性的对话框,让用户选择货物配送的地址,如果是淘宝和京东的话,那么这个选择配货地址的选项是在商品里,如下图是淘宝的选择配送地点:下图是京东选择配货地点:那么图一跟京东和淘宝有什么区别呢?图一的电商强制用户选择地区后,那么我们在查询这个商品时候会因为地... 继续阅读 >
201503-06 关于大型网站技术演进的思考(七):存储的瓶颈(7) 本文开篇提个问题给大家,关系数据库的瓶颈有哪些?我想有些朋友看到这个问题肯定会说出自己平时开发中碰到了一个跟数据库有关的什么什么问题,然后如何解决的等等,这样的答案没问题,但是却没有代表性,如果出现了一个新的存储瓶颈问题,你在那个场景的处理经验可以套用在这个新问题上吗?这个真的很难说。其实不管什么样的问题场景最后解决它都要落实到数据库的话,那么这个问题场景一定是击中了数据库的某个痛点,那么我前面... 继续阅读 >
201503-06 关于大型网站技术演进的思考(六):存储的瓶颈(6) 在讲数据库水平拆分时候,我列出了水平拆分数据库需要解决的两个难题,它们分别是主键的设计问题和单表查询的问题,主键问题前文已经做了比较详细的讲述了,但是第二个问题我没有讲述,今天我将会讲讲如何解决数据表被水平拆分后的单表查询问题。要解决数据表被水平拆分后的单表查询问题,我们首先要回到问题的源头,我们为什么需要将数据库的表进行水平拆分。下面我们来推导下我们最终下定决心做水平拆分表的演进过程,具体如下... 继续阅读 >
201503-06 关于大型网站技术演进的思考(五):存储的瓶颈(5) 上文里我遗留了两个问题,一个问题是数据库做了水平拆分以后,如果我们对主键的设计采取一种均匀分布的策略,那么它对于被水平拆分出的表后续的查询操作将有何种影响,第二个问题就是水平拆分的扩容问题。这两个问题在深入下去,本系列就越来越技术化了,可能最终很多朋友读完后还是没有找到解决实际问题的启迪,而且我觉得这些问题都是像BAT这样巨型互联网公司才会认真思考的,因此本篇我打算换个角度来阐述本文的后续内容。这里... 继续阅读 >
201503-06 关于大型网站技术演进的思考(四):存储的瓶颈(4) 如果数据库需要进行水平拆分,这其实是一件很开心的事情,因为它代表公司的业务正在迅猛的增长,对于开发人员而言那就是有不尽的项目可以做,虽然会感觉很忙,但是人过的充实,心里也踏实。数据库水平拆分简单说来就是先将原数据库里的一张表在做垂直拆分出来放置在单独的数据库和单独的表里后更进一步的把本来是一个整体的表进一步拆分成多张表,每一张表都用独立的数据库进行存储。当表被水平拆分后,原数据表成为了一个逻... 继续阅读 >
201503-06 关于大型网站技术演进的思考(三):存储的瓶颈(3) 存储的瓶颈写到现在就要进入到深水区了,如果我们所做的网站已经到了做数据库垂直拆分和水平拆分的阶段,那么此时我们所面临的技术难度的挑战也会大大增强。这里我们先回顾下数据库的垂直拆分和水平拆分的定义:垂直拆分:把一个数据库中不同业务单元的数据分到不同的数据库里。水平拆分:是根据一定的规则把同一业务单元的数据拆分到多个数据库里。垂直拆分是一个粗粒度的拆分数据,它主要是将原来在一个数据库下的表... 继续阅读 >
201503-06 关于大型网站技术演进的思考(二):存储的瓶颈(2) 上篇里我讲到某些网站在高并发下会报出503错误,503错误的含义是指网站服务端暂时无法提供服务的含义,503还表达了网站服务端现在有问题但是以后可能会提供正常的服务,对http协议熟悉的人都知道,5开头的响应码表达了服务端出现了问题,在我们开发测试时候最为常见的是500错误,500代表的含义是服务端程序出现了错误导致网站无法正常提供服务,500通常是服务端异常和错误所致,如果生产系统里发现了500错误,那么只能说明网站存... 继续阅读 >
201503-06 关于大型网站技术演进的思考(一):存储的瓶颈(1) 前不久公司请来了位互联网界的技术大牛跟我们做了一次大型网站架构的培训,两天12个小时信息量非常大,知识的广度和难度也非常大,培训完后我很难完整理出全部听到的知识,今天我换了个思路是回味这次培训,这个思路就是通过本人目前的经验和技术水平来思考下大型网站技术演进的过程。首先我们要思考一个问题,什么样的网站才是大型网站,从网站的技术指标角度考虑这个问题人们很容易犯一个毛病就是认为网站的访问量是衡量的指标... 继续阅读 >
201503-05 MySQL性能优化指南 本文的主要目标是介绍如何优化MySQL数据库,通过定期分析表和检查表、定期优化表以及一些常用SQL语句的优化手段,可以帮助你学会在MySQL开发中编写更为高效的SQL。1、定期分析表和检查表分析表的语法如下:ANALYZE[LOCAL|NO_WRITE_TO_BINLOG]TABLEtb1_name[,tbl_name]...以上语句用于分析和存储表的关键字分布,分析的结果将可以使得系统得到准确的统计信息,使得SQL能够生成正确的执行计划。如果用户感觉实际执行计划并... 继续阅读 >