专注于互联网系统设计
网站如果有很多用户上传图片(相册,商品图片),一般的做法是将用户图片保存在磁盘上面(数据库中记录图片的地址)。用户上传的时候按照原图、中图、小图等各个尺寸都生成一份保存在磁盘上。比如php的网店系统echsop就是这么做的,而shopex之类也大同小异。
http://v.youku.com/v_show/id_XMzc4OTA4MDky.html 58使用mongdbhttp://v.youku.com/v_show/id_XMzM4MDYwNTQw.html 赶集网。
本篇文章讨论并不是:不要使用存储过程,因为有些事情还是要存储过程来完成,不可能不用。而是关于:"业务逻辑是不是要封装在存储过程中实现,这样子php、java等就是调用存储过程"。 业务逻辑,通俗说就是:比如要取数据的操作,取出会员编号为x的数据,原来我们一般是封装成函数,或者直接编写sql语句查询。
网站速度定位总体思想:1、找瓶颈法。瓶子的颈部(口子)大小决定了出入量,从而决定了速度。不去改善瓶颈,使劲费力气把瓶子容量扩大,速度也不会提高。不是什么都去改善就是好的。比如改善带宽,加缓存之类的。但是这些不是目前系统的瓶颈,改善了也不会发生质的飞跃。
存储引擎 支持的锁定级别 myisam 表级别 memory 表级别 inndb 行级别 bdb: 页级别 lock锁定类型 锁定方式 目的 读锁 自己与其他线程只能读取该表 写锁 只有当前线程能够对表进行写入操作(其他线程也无法读这部分数据) 读锁的英文叫法是shared locks,shared是共享的意思,共享锁,就是所有用户都可以共享进行读(包括加锁的用户),不能写。
以前看有人解决铁道部订票方案的时候,提供的思路。网友评价是:陷入了纯技术思维路子。 仔细想想非常有道理。 这里还是一种调度的思想原则。现实中很多事情像公交车,列车,拥堵的时候进行调度,运作的不错。
商品图片,用户上传的头像,其他方面的图片。目前业界存储图片有两种做法: 1、 把图片直接以二进制形式存储在数据库中 一般数据库提供一个二进制字段来存储二进制数据。比如mysql中有个blob字段。
这篇文章来自于看博客园一个园友的分享经历,原文:http://www.cnblogs.com/qqloving/p/3427138.html 他不清楚mysql一个库里面分多少张表合适,他一个库分了8000张表。
在php中,符号"&"表示引用。 1、看看不引用的情况是这样子: $a = "hello world";//定义一个变量,下面赋值给$b $b = $a;//这一步没有在$a之前加符号&,像这样子"$b= & $a"。
session的存储了解以前是怎么做的,搞清楚了来龙去脉,才会明白进行共享背后的思想和出发点。我喜欢按照这样的方式来问(或者去搞清楚):为什么要session要进行共享,不共享会什么问题呢? php中session的原理,以前做了一下总结,可以参考:http://www.cnblogs.com/wangtao_20/archive/2011/02/16/1955659.html 以前业界使用session的做法: 默认情况下,php的session文件是保存在磁盘文件中。
以前,看一些资料,比如一个公司选择什么类型的数据库系统,是mysql还是postgrelsql,mongdb等,不仅仅是看符合自己需求。而一个关键点也是非常重要的:持续的技术支持。 如果php后面没有成立官方公司来运作,相信不会有多少公司愿意继续采纳。
很多人资料说,last与break的区别在于,last并不会停止对下面location的匹配。我理解上模模糊糊。今天自己来测验了一下。rewrite 指令末尾的break应该与单独写break作用是不同的,比如:if ($slow) { limit_rate 10k; break;}nginx对待rewrite中的break使用了单独的代码处理去此命令。
进了一个技术群,发现里面眼高手低的人实在是不少。初级问题觉得不够高深。不屑一顾。实际上:回答一些初级的问题,往往能够加深自己的理解。尤其是越通俗易懂得解释,越说明个人的领悟层面高低。可能真正让他去认真解释,连他自己都不是很清楚,这类人固步自封了。
技术人员做久了。最好学会架构或者说是战略层面考虑的事情,从整体考虑一些东西。而不是单纯纠结技术细节。战略与战术的选取。战术可以多种多样。比如,考虑公司几个技术人员,人力去机房维护成本(这样子根据目前访问量是不是不需要独立服务器呢?租用配置好vps等等方案),这里只是一个比方,从整体考虑。
看纯英文的。国人翻译出错。确实误导新人的,或者是意思不准确。容易产生误解。===========nginx中文手册对fastcgi_pass的解释fastcgi_pass语法:fastcgi_pass fastcgi-server默认值:none使用字段:http, server, location指定FastCGI服务器监听端口与地址,可以是本机或者其它:从中文解释中,乍看还以为是nginx带有一个cgi服务器,需要指定它侦听哪个端口呢。
Web 访问日志 (access_log) 记录了所有外部客户端对Web服务器的访问行为,包含了客户端IP,访问日期,访问的URL资源,服务器返回的HTTP状态码等重要信息。 一条典型的Web访问日志如下: 112.
下载源码包的网址 http://pecl.php.net/package/xhprof 上面说了,每个版本适用的php版本。 规划(预先搞清楚思路)一、这是一个php扩展的形式。我们安装gd2,curl都是php的扩展形式。
查看当前服务器是否开启慢查询:1、快速办法,运行sql语句show VARIABLES like "%slow%" 2、直接去my.conf中查看。my.conf中的配置(放在[mysqld]下的下方加入)[mysqld]log-slow-queries = /usr/local/mysql/var/slowquery.loglong_query_time = 1 #单位是秒log-queries-not-using-indexes使用sql语句来修改:不能按照my.conf中的项来修改的。
目前流行几种备份方式:1、逻辑备份:使用mysql自带的mysqldump工具进行备份。备份成sql文件形式。优点:最大好处是能够与正在运行的mysql自动协同工作,在运行期间可以确保备份是当时的点,它会自动将对应操作的表锁定,不允许其他用户修改(只能访问)。
部署:MongoDB服务端可运行在Linux、Windows或IOS平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB。
mongodb的结构与关系型数据库不同,它类似树状结构,可以很方便对每个分支进行操作,但它没有像mysql那样insert(value、value、value...)那样的语法,也不支持transaction所以mongodb不能批量插入数据,如果你要批量插入数据,可以在mongodb里写一个循环,它支持for等语法。
像Oracle这样成熟稳定的数据库,足以支撑海量数据的存储与查询了?为什么还需要数据切片呢?的确,Oracle的DB确实很成熟很稳定,但是高昂的使用费用和高端的硬件支撑不是每一个公司能支付的起的。试想一下一年几千万的使用费用和动辄上千万元的小型机作为硬件支撑,这是一般公司能支付的起的吗?即使就是能支付的起,假如有更好的方案,有更廉价且水平扩展性能更好的方案,我们为什么不选择呢?收费是按照cpu个数和用户数两种方式进行的:http://blog.csdn.net/hzw2312/article/details/8617607 mysql被sun收购,sun最后又被oracle收购。
突然写个感悟:感觉有些公司不能呆久了。呆久了,技术得不到提升。过去的经历存在大脑数据库,人做判断是根据大脑数据库已经存储的信息,所以思维模式容易受到过去的影响。 做phper,想提升技术,两类公司不能呆久了:一类是网站建设公司。
:吉姆.科林斯在中用了很大篇幅谈论应该懂得何时停止的问题。2004年,当我阅读他的这本书时,我又想起了我1984年和1994年的两次止步。并没有什么信号,也没有什么冥冥之中的声音在昭示我"是时候该停下来了"。
技术不是用来显示自己多么牛逼的。是用来解决问题的工具,这样才会产生市场价值,于是产生生产力。追求花俏的东西。没有任何意义。 1、喜欢测验一些花俏,不实用的技能。 很多公司的技术,由于不懂如何面试。
多看一些资料,实践了几年有了如下感悟: 单一的技术化思路,只会陷入技术死胡同越陷越深。有时候要跳出来,从业务上去看,从现实中一些事情去看。现实中的思想用到技术中去。技术只是一个工具而已,确定一种什么思想,然后以技术为工具去解决。
好的程序员做不出好的软件设计 本文由“外刊IT评论”网(http://www.aqee.net/)荣誉出品 你不能看到一个程序员还不错,就把他推到系统分析师、软件设计师或软件架构师的位置上。 如果你在团队或公司里寻找一个能胜任软件架构师或设计师这样重要位置的人时,首先出现在脑子里的想法通常是在程序员中选一个最好的。
创业型公司如何激励员工 享受工作环境是最好的激励 (潘晓良 百姓网CTO) 理 想的工作状态应该是怎样的?那就是在每天早上醒来时,就迫不及待地投入到一天的工作中,每天都 有那么多有意义的事情在等待着我,看着一件件解决,感觉是充实且快乐的;总是感觉自己在工作中能够不断学到新的东西,自己在变得更强;自己的价值能够被认可,自己的问题能够被发现;自己的建议能够被重视,有充分的发言权;我依赖公司给创造的良好环境,公司也需要我的努力和辅助,当公司获得成功时,我也能享 受我的回报。
原文链接 [收藏] « » 英文原文:I'm Sure It Will Only Take You A Few Days To Code “这个网站相当简单,所有你需要做的就是完成X,Y,Z。
################################### 方法与观念的改变 ################################### 错误导向: 我在网上会看到人们怎么优化网站,就是用yslow这样的工具来看,工具会告诉你要怎么做,哪方面有问题,比如我写在文档里面的像这样的: 这里会告诉你要开启压缩。
mysql的用户密码保存在数据库中是加密的。不可逆的。当需要创建一个新的帐号,如果是使用insert插入一条记录,mysql提供了一个函数PASSWORD(),对明文进行加密。所以有如下sql:insert into mysql.user values('帐号名',PASSWORD('设置的帐号密码'));但是,mysql4.1版本之前有些不同。
如果你的需要是统计总行数时,为什么要使用count(*),而避免使用指定具体的列名?count()函数里面的参数是列名的的时候,那么会计算这个字段有值项的次数。也就是,该字段没有值的项并不会进入计算范围(就是网上常说的值为null的项不纳入统计) 很多地方都有类似表述: COUNT ( column ) counts all non-NULL occurences (or should … 计算所有column字段为"非null"值的总数。
一、通信知识中的半双工概念通信的方式分为:单工通信,半双工,全双工。全双工的典型例子是:打电话。电话在接到声音的同时也会传递声音。在一个时刻,线路上允许两个方向上的数据传输。网卡也是双工模式。在接收数据(比如一直在下载东西)的同时,又发送数据(比如请求网页)半双工:在同一个时刻只能进行一个动作。
Compiling shared PECL extensions with phpizeSometimes, using the pecl installer is not an option. This could be because you're behind a firewall, or i...
下面是记录使用二进制的方式安装mysql的步骤 2011.3.5 使用二进制安装的好处 mysql安装为什么大部分使用二进制安装。而不是源码手动去编译?mysql使用的glibc进行开发的。
总结的方向:在linux下php挂接mysql.so扩展的方法问题背景:平常我们都是先安装mysql,然后才能去安装php。假如先安装php,后安装mysql,由于php需要连接mysql,因而在php引擎中需要配置使用mysql.so扩展。
买书的时候,遇到好几本比较好的书籍。看着是外国高手写的书,怎么都比国内人写的书籍更有料。先不管这本书适不适合自己。哪怕你买本操作系统原理之类的书籍,即使当时你看不懂。也不会浪费你钱买了本没有多大用的书结果浪费你时间。
问题在于:如果没有指定 extract_type,则被假定为 EXTR_OVERWRITE。 覆盖就意味着,假如在使用extract之前存在一个跟数组中索引值相等的变量名。那么,就会覆盖掉之前的变量值。
全局变量就是在函数外面定义的变量。不能在函数中直接使用。因为它的作用域不会到函数内部。所以在函数内部使用的时候常常看到类似global $a;超全局变量作用域在所有脚本都有效。所以,在函数可直接使用。比如 $_GET,$_SERVER都是超全局变量。
年前有这样的体会。必须迈过的一道坎:看英文原版书籍。尽管首次看会比较吃力。但是,一定要经历这个过程才行。看到慢,不要紧。先看,不是简单点的。一开始就很难,就会让你失去信心。 今天收到购买的影印版书籍,大致看了一下。
select FOUND_ROWS()总是返回上一次select所返回的行数。它的结果受到上一次select中是否使用SQL_CALC_FOUND_ROWS的影响测试如下:1.运行语句:select SQL_CALC_FOUND_ROWS * from penalties where amount>=20 limit 2然后运行:select FOUND_ROWS();返回的行数是:42.
压缩css和js脚本是非常值得的。根据经验,通常对大于1kb或者2kb的文件进行压缩。对图片进行压缩是得不偿失的。因为会消耗许多cpu资源(包括服务器端和客户端的)LoadModule expires_module modules/mod_expires.soCache-Control:Private 禁用代理apache的版本与压缩组件的关系:1.3对应了mod_gizp 2.x对应了mod_deflate也就是:1.3的gizp功能由mod_gizp提供。
linux下文件的几种类型:目录,符号链接、套接字文件....。要注意,说到的文件类型是一个不一样的概念。linux下文件的类型不是后缀名上进行区别。"-"表示该文件是一个普通类型的文件。什么是普通类型文件?你得记住linux下几种类型的文件。
常常使用的到了更新操作。学习后,知道了update还有其他一些用法,以前并不知道。现在进行总结一、update后面使用order by的情况什么时候有必要增加order by:假如一个表中有自增型或者唯一键id。
一、不兼容的语法问题。 先看使用如下sql:SELECT count(*),town FROM `players` 结果会报错。从这里涉及到sql的一个原则:值的集合与一个行mysql认为是不兼容的。
使用phpmyadmin导出sql的时候,常常会出现SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";的语句。通过看sql手册,明白了这里设置的含义。那么可以回答几个疑惑性问题了一、设置sql模式有什么作用?会产生什么方面的影响?模式定义mysql会支持哪些sql语法。
INSERT DELAYED是立刻返回一个标识,告诉上层程序,数据已经插入了,当表没有被其它线程使用时,此行被插入,真实插入时间就不可控了。所以这样的写法对数据的安全性是没有保障的。· 如果您使用DELAYED关键字,则服务器会把待插入的行放到一个缓冲器中,而发送INSERT DELAYED语句的客户端会继续运行。
mysql手册sql优化学习:BENCHMARK(1000000,1+1)的理解:执行右边表达式(1+1)1000000次。该函数执行所返回的结果永远是0英文参考理解:表达式必须是标量表达式。比如select 返回的是很多行,是一个结果集。
在url中附带的参数明明是a=show 结果,使用$_GET['a']得到的结果是index,这是在一个静态页面中以href属性的形式点击访问的。而直接在浏览器中输入url却访问正常,使用$_GET['a']得到的结果是是show了。
set语句的学习:使用select定义用户变量的实践将如下语句改成select的形式: set @VAR=(select sum(amount) from penalties);我的修改: select @VAR:=(select sum(amount) from penalties);我这样改,虽然是可以的。