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能够生成正确的执行计划。如果用户感觉实际执行计划并... 继续阅读 >
201503-05 大数据量下MySQL插入方法的性能比较 不管是日常业务数据处理中,还是数据库的导入导出,都可能遇到需要处理大量数据的插入。插入的方式和数据库引擎都会对插入速度造成影响,这篇文章旨在从理论和实践上对各种方法进行分析和比较,方便以后应用中插入方法的选择。插入分析MySQL中插入一个记录需要的时间由下列因素组成,其中的数字表示大约比例:连接:(3)发送查询给服务器:(2)分析查询:(2)插入记录:(1x记录大小)插入索引:(1x索引... 继续阅读 >
201503-03 MySQL终端管理数据库操作指南 MySQL有很多的可视化管理工具,比如“mysql-workbench”和“sequel-pro-”。现在我写MySQL的终端命令操作的文章,是想强化一下自己对于MySQL的理解,总会比使用图形化的理解透彻,因为我本来就比较喜欢写代码。同时写出来这些文章,是想要给大家当个参考,希望也能对大家有所帮助,有所提升,这就是我为什么要写终端操作MySQL的文章了。注意:MySQL数据库命令不区分大小写。但在MAC的终端,如果你想使用tab自动补全命令,那么... 继续阅读 >
201503-01 Facebook如何实现PB级别数据库自动化备份 Facebook的MySQL数据库,是世界上最庞大的MySQL数据库之一,在不同地区有数千个数据库服务器。因此,备份对他们来说是个巨大的挑战。为了解决这个问题,他们构建了一个高度自动化、非常有效的备份系统,每周移动多个PB的数据。Facebook数据团队的EricBarrett通过一篇文章分享了他们的做法。他们没有采用大量前载(front-loaded)测试,而是强调快速检测失败,并且进行快速、自动化纠正。部署几百个数据库服务器,只需很少人力干... 继续阅读 >
201502-13 PHP扩展小试牛刀系列之数据库扩展mysqli详细使用教程 mysqli提供了面向对象和面向过程两种方式来与数据库交互,分别看一下这两种方式。1、面向对象在面向对象的方式中,mysqli被封装成一个类,它的构造方法如下:__construct([string$host[,string$username[,string$passwd[,string$dbname[,int$port[,string$socket]]]]]])在上述语法中涉及到的参数说明如下。host:连接的服务器地址。username:连接数据库的用户名,默认值是服务器进程所有者的用户... 继续阅读 >
201502-03 深入解析NoSQL数据库的分布式算法 尽管NoSQL运动并没有给分布式数据处理带来根本性的技术变革,但是依然引发了铺天盖地的关于各种协议和算法的研究以及实践。在这篇文章里,我将针对NoSQL数据库的分布式特点进行一些系统化的描述。系统的可扩展性是推动NoSQL运动发展的的主要理由,包含了分布式系统协调,故障转移,资源管理和许多其他特性。这么讲使得NoSQL听起来像是一个大筐,什么都能塞进去。尽管NoSQL运动并没有给分布式数据处理带来根本性的技术变革,但是依... 继续阅读 >
201502-02 PHP将JSON格式省市(区)二级数据插入数据库 在网站开发过程中,很多情况下都要用到省市(区)二级联动下拉菜单,比如地址信息,以及天气等API接口调用,等等,而且具有通用性,一次入库,到处使用,前面农夫庄园相关文章提到过该方法,但是网上找到的省市信息比较坑,很多将县一级的城市也列到区市里,后面还要删除,比较麻烦,后来在测试天气API的时候,找到一个更好的json格式的省市信息,应该是比较准确了,这里将相关代码列出如下,希望给大家提供帮助:首先需要下载我... 继续阅读 >
201501-31 程序员容易忽略的SQL Server错误集锦 概述因为每天需要审核程序员发布的SQL语句,所以收集了一些程序员的一些常见问题,还有一些平时收集的其它一些问题,这也是很多人容易忽视的问题,在以后收集到的问题会补充在文章末尾,欢迎关注,由于收集的问题很多是针对于生产数据,测试且数据量比较大,这里就不把数据共享出来了,大家理解意思就行。步骤大小写大写T-SQL语言的所有关键字都使用大写,规范要求。使用“;”使用“;”作为Transact-SQL语句终止符。虽然... 继续阅读 >