Linux 下串口终端,默认是字符界面minicom.这个软件优点是REHL自带,缺点也不少。一是在在LINUX桌面版下,对于嵌入式初学者,容易与字符终端搞混,。二是界面分隔不明显,如解释给开发板传送文件,不太容易看出是怎么进行。而在WINDOWS下,用超级终端就分隔的很明显,学生一操作就明白,三是与开发板有一些不太兼容,比如在某一个开发板上,发现光标经常丢失,这样造成使用上极为不方便,因此后我也就找到一款图形界面串口终端,gtkterm来代替minicom
gtkterm的使用说明
下载
http://www.jls-info.com/julien/linux/
最新版本是 http://www.jls-info.com/julien/linux/gtkterm-0.99.5.tar.gz
在RHEL5上它需要 libiconv库和libvte 0.10.以上库
这个是典型的configure & make & make install项目
1.安装libiconv
2.安装VTE,否则报相应的库找不到,RHEL自带光盘带了安装文件,但是默认开发库找不到。
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.10.4... yes
checking for TERMINAL_WIDGET... Package vte was not found in the pkg-config search path.
Perhaps you should add the directory containing `vte.pc'
to the PKG_CONFIG_PATH environment variable
No package 'vte' found
configure: error: Package requirements (vte >= 0.10.4) were not met.
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed sofchecking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.10.4... yes
checking for TERMINAL_WIDGET... Package vte was not found in the pkg-config search path.
Perhaps you should add the directory containing `vte.pc'
to the PKG_CONFIG_PATH environment variable
No package 'vte' found
configure: error: Package requirements (vte >= 0.10.4) were not met.
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively you may set the TERMINAL_WIDGET_CFLAGS and TERMINAL_WIDGET_LIBS environment variables
to avoid the need to call pkg-config. See the pkg-config man page for
more details.
tware in a non-standard prefix.
Alternatively you may set the TERMINAL_WIDGET_CFLAGS and TERMINAL_WIDGET_LIBS environment variables
to avoid the need to call pkg-config. See the pkg-config man page for
more details.
安装库文件,
[root@rhel5 Server]# rpm -ivh vte-0.14.0-2.el5.i386.rpm
warning: vte-0.14.0-2.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
package vte-0.14.0-2.el5 is already installed
[root@rhel5 Server]# rpm -ivh vte-devel-0.14.0-2.el5.i386.rpm
warning: vte-devel-0.14.0-2.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:vte-devel ########################################### [100%]
[root@rhel5 Server]#
3.生成make ,注意要把链接iconv库的语句加入,否则链接时找不到。
LDFLAGS=-liconv ./configure #生成Makefile,如果提示缺省的C找不到,可以先执行一次./configure后再执行上述语句
4.编译,安装 make & make install
安装后执行 gtkterm. 进行图形界面配置即可
来源:http://blog.chinaunix.net/u3/105675/showart_2108697.html
gtkterm的使用说明
下载
http://www.jls-info.com/julien/linux/
最新版本是 http://www.jls-info.com/julien/linux/gtkterm-0.99.5.tar.gz
在RHEL5上它需要 libiconv库和libvte 0.10.以上库
这个是典型的configure & make & make install项目
1.安装libiconv
2.安装VTE,否则报相应的库找不到,RHEL自带光盘带了安装文件,但是默认开发库找不到。
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.10.4... yes
checking for TERMINAL_WIDGET... Package vte was not found in the pkg-config search path.
Perhaps you should add the directory containing `vte.pc'
to the PKG_CONFIG_PATH environment variable
No package 'vte' found
configure: error: Package requirements (vte >= 0.10.4) were not met.
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed sofchecking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.10.4... yes
checking for TERMINAL_WIDGET... Package vte was not found in the pkg-config search path.
Perhaps you should add the directory containing `vte.pc'
to the PKG_CONFIG_PATH environment variable
No package 'vte' found
configure: error: Package requirements (vte >= 0.10.4) were not met.
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively you may set the TERMINAL_WIDGET_CFLAGS and TERMINAL_WIDGET_LIBS environment variables
to avoid the need to call pkg-config. See the pkg-config man page for
more details.
tware in a non-standard prefix.
Alternatively you may set the TERMINAL_WIDGET_CFLAGS and TERMINAL_WIDGET_LIBS environment variables
to avoid the need to call pkg-config. See the pkg-config man page for
more details.
安装库文件,
[root@rhel5 Server]# rpm -ivh vte-0.14.0-2.el5.i386.rpm
warning: vte-0.14.0-2.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
package vte-0.14.0-2.el5 is already installed
[root@rhel5 Server]# rpm -ivh vte-devel-0.14.0-2.el5.i386.rpm
warning: vte-devel-0.14.0-2.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:vte-devel ########################################### [100%]
[root@rhel5 Server]#
3.生成make ,注意要把链接iconv库的语句加入,否则链接时找不到。
LDFLAGS=-liconv ./configure #生成Makefile,如果提示缺省的C找不到,可以先执行一次./configure后再执行上述语句
4.编译,安装 make & make install
安装后执行 gtkterm. 进行图形界面配置即可
来源:http://blog.chinaunix.net/u3/105675/showart_2108697.html
1.不买任何带有明显LOGO的东西,比如LV的Monogram。
2.一万元以内的奢侈品,可以买,但不可以绷(炫耀)。
3.总和你玩在一起的朋友一定不会是能提携你的贵人。
4.就算月挣3000,房租(贷)2000,但该请客的时候也决不含糊。
5.与人交友,两种东西不可赖:酒与钱。
6.只要是在自己的承受范围内,别人爱怎么占便宜就怎么占吧。
7.送朋友礼物一定要大方一点。
8.对于自己买不起的东西,就不要经常挂在嘴边,写进文里了——好象自己已经在用了一样。阅读全文
2.一万元以内的奢侈品,可以买,但不可以绷(炫耀)。
3.总和你玩在一起的朋友一定不会是能提携你的贵人。
4.就算月挣3000,房租(贷)2000,但该请客的时候也决不含糊。
5.与人交友,两种东西不可赖:酒与钱。
6.只要是在自己的承受范围内,别人爱怎么占便宜就怎么占吧。
7.送朋友礼物一定要大方一点。
8.对于自己买不起的东西,就不要经常挂在嘴边,写进文里了——好象自己已经在用了一样。阅读全文
先列举几个实事:国内大学课程中,C程序设计已被列为公共基础课;C和C++目前以27.0%的总和位居计算机语言排行榜榜首;各种著名的算法通常都以C语言描述作为标准;开源操作系统 Linux 2.6 内核源代码接近600万行,其中99%以上的代码是用C写的。
C是一种结构化的、面向过程的高级编程语言,C是最能让你理解计算机程序运行原理的高级语言,它最贴近于汇编,跨平台性好,系统级别的程序设计都离不开C语言,比如Linux内核和驱动程序99%以上的代码是C写的!在没有高级语言的日子里,前辈们使用汇编代码操纵机器指令,繁琐的助记符和杂乱的结构给程序的编写和调试带来了极大的麻烦,更重要的是汇编程序是高度依赖于具体CPU的,换一个平台代码就要全部重写一次。人们设想能否以一种直观的、结构化的表现手段来描述头脑中的编程想法,然后由计算机来“翻译”成机器指令?——C语言的发明使这一想法成为了现实,这里不得不提两个人: Ken Thompson 和 Dennis Ritchie (K&R),二人在开发UNIX时发明了C语言 ——从此,人们编程可以不必关心计算机的运行细节,而把重点放到程序的功能和结构的设计上,C语言的出现也第一次真正将结构化编程概念变为现实,结构化带来了模块化,模块化使分工协作成为可能,分工协作则带来了软件的产业化!这正是C经历了30多年仍保持旺盛生命力的原因之一。
C语言贴近于汇编,几乎每句C程序都与若干条相对固定的汇编指令相对应。据统计,优秀的C编译器编译出的程序仅比相应的汇编代码写出的程序平均略大约10%,略慢约10%。C的指针保留了汇编的部分特性,这使得C/C++成为了唯一能够直接操作内存的高级语言,在提供高级语言方便性性的同时最大限度地保留了底层硬件提供的基本功能,在结构性和灵活性之间取得最佳平衡点!因此,C语言应该和某一种平台的汇编结合起来学习,从计算机运行原理和程序设计两个层面充分理解C语言,才能达到最好的学习效果!
现在很多人推崇C++,没错,面向对象是计算机编程继结构化之后最伟大的革命,C++面向对象的概念给我们编程带来了极大的方便,但在选择使用C++之前至少应理解什么是“面向对象”,其次,要明白C++比C的优势在哪里,劣势或不足在哪里。我个人非常不屑“为了多学一门语言、为了追求面向对象时髦而学C++”的想法,很多人仅仅学了C++表面的东西却说自己学会C++了,然而问其什么是多态、什么是重载、虚函数的作用却支吾半天说不上来。不要忘了,面向对象是以面向过程为基础的,更确切的说C++完全包含了C!所以说,一方面学习C++一定要以C为基础,而且是扎实的C编程基本功!以C的基础来学C++会事半功倍!另一方面要根据需要来决定使用结构化(C)还是面向对象(C++),如果C完全能胜任就没必要使用C++,实事证明,C++编译出的程序要比C大一些、慢一些,而且C++的跨平台性不如C好。说到面向对象编程,其实C的结构体就有面向对象的概念的雏形,Linux内核中很多代码都是用结构体(struct)封装的数据结构,有与各结构体相对应的处理函数,结构紧凑,设计十分巧妙,可以说是用C实现的“面向对象”编程。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/rssn_net/archive/2008/09/07/2893935.aspx
http://blog.csdn.net/rssn_net/archive/2008/09/07/2893935.aspx
C是一种结构化的、面向过程的高级编程语言,C是最能让你理解计算机程序运行原理的高级语言,它最贴近于汇编,跨平台性好,系统级别的程序设计都离不开C语言,比如Linux内核和驱动程序99%以上的代码是C写的!在没有高级语言的日子里,前辈们使用汇编代码操纵机器指令,繁琐的助记符和杂乱的结构给程序的编写和调试带来了极大的麻烦,更重要的是汇编程序是高度依赖于具体CPU的,换一个平台代码就要全部重写一次。人们设想能否以一种直观的、结构化的表现手段来描述头脑中的编程想法,然后由计算机来“翻译”成机器指令?——C语言的发明使这一想法成为了现实,这里不得不提两个人: Ken Thompson 和 Dennis Ritchie (K&R),二人在开发UNIX时发明了C语言 ——从此,人们编程可以不必关心计算机的运行细节,而把重点放到程序的功能和结构的设计上,C语言的出现也第一次真正将结构化编程概念变为现实,结构化带来了模块化,模块化使分工协作成为可能,分工协作则带来了软件的产业化!这正是C经历了30多年仍保持旺盛生命力的原因之一。
C语言贴近于汇编,几乎每句C程序都与若干条相对固定的汇编指令相对应。据统计,优秀的C编译器编译出的程序仅比相应的汇编代码写出的程序平均略大约10%,略慢约10%。C的指针保留了汇编的部分特性,这使得C/C++成为了唯一能够直接操作内存的高级语言,在提供高级语言方便性性的同时最大限度地保留了底层硬件提供的基本功能,在结构性和灵活性之间取得最佳平衡点!因此,C语言应该和某一种平台的汇编结合起来学习,从计算机运行原理和程序设计两个层面充分理解C语言,才能达到最好的学习效果!
现在很多人推崇C++,没错,面向对象是计算机编程继结构化之后最伟大的革命,C++面向对象的概念给我们编程带来了极大的方便,但在选择使用C++之前至少应理解什么是“面向对象”,其次,要明白C++比C的优势在哪里,劣势或不足在哪里。我个人非常不屑“为了多学一门语言、为了追求面向对象时髦而学C++”的想法,很多人仅仅学了C++表面的东西却说自己学会C++了,然而问其什么是多态、什么是重载、虚函数的作用却支吾半天说不上来。不要忘了,面向对象是以面向过程为基础的,更确切的说C++完全包含了C!所以说,一方面学习C++一定要以C为基础,而且是扎实的C编程基本功!以C的基础来学C++会事半功倍!另一方面要根据需要来决定使用结构化(C)还是面向对象(C++),如果C完全能胜任就没必要使用C++,实事证明,C++编译出的程序要比C大一些、慢一些,而且C++的跨平台性不如C好。说到面向对象编程,其实C的结构体就有面向对象的概念的雏形,Linux内核中很多代码都是用结构体(struct)封装的数据结构,有与各结构体相对应的处理函数,结构紧凑,设计十分巧妙,可以说是用C实现的“面向对象”编程。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/rssn_net/archive/2008/09/07/2893935.aspx
http://blog.csdn.net/rssn_net/archive/2008/09/07/2893935.aspx
中国企业喜欢这么搞:某人甲从A公司离职,创办了一家B公司。
有一天A公司状告B公司商业侵权,法院说你凭什么说B侵权,A公司说你看他们的源代码就知道了!
于是公安查封了B公司,拘留了某人甲,然后把B公司的所有服务器、硬盘送到A公司,供A公司取证。
半年之后,案子有了结果:A公司因证据不足撤诉,某人甲被无罪释放。B公司倒闭。。。
有一天A公司状告B公司商业侵权,法院说你凭什么说B侵权,A公司说你看他们的源代码就知道了!
于是公安查封了B公司,拘留了某人甲,然后把B公司的所有服务器、硬盘送到A公司,供A公司取证。
半年之后,案子有了结果:A公司因证据不足撤诉,某人甲被无罪释放。B公司倒闭。。。
伪静态已经不是一个新鲜的名词了,尤其是在现今SEO的炒作中。如何实现伪静态这是每个程序员都关心的问题,除非您不搞SEO。大多的伪静态都是以Htaccess(Apache mod_rewrite)来实现的,但是一个规划不太好的网站要用Htaccess实现,需要写一大堆的代码,而还有某种原因我们不得不放弃Htaccess,或是由于服务器不支持,或是个人偏好等等。阅读全文
_call()函数是php类的默认魔法函数,__call() 在一个对象的上下文中,如果调用的方法不能访问,它将被触发,可以用它来做重载,如果一个类的方法不存在,则需要重新加载一次。
运行结果:
Calling object method 'runTest' in object context
以上来自:
http://blog.163.com/lgh_2002/blog/static/4401752620105256371802/
用__call()实现方法重载 :
<?php
class foo {
function __call($name,$arguments) {
print("Did you call me? I'm $name!");
print_r($arguments);
}
} $x = new foo();
$array = array(1,2,2,1984);
$x->doStuff("dfdf");
$x->fancy_stuff($array,"777");
?>
Did you call me? I'm doStuff!Array ( [0] => dfdf ) Did you call me? I'm fancy_stuff!Array ( [0] => Array ( [0] => 1 [1] => 2 [2] => 2 [3] => 1984 ) [1] => 777 )
$arguments 0,1,2,3 分别对应如果没有该函数的三个函数参数。
$name表示缺失的函数名称!
使用 __call 实现“过载”动作
---------- 调试PHP情况 ----------
456
not_exist_fun is called but not exist,U can do it by yourselft.
方法不存在
————————————————————————————————————————————————————————
如果在框架里用它,是这样的,PHP5里有一个反射函数,进行autoload进相关文件,后对该类的Obj进行:Obj->fun();
如果这个fun不存在就调用这个__call,这个call是上层类,其autoload时new的是这个继承的类名,于是有,如下伪代码:
运行结果:
Calling object method 'runTest' in object context
以上来自:
http://blog.163.com/lgh_2002/blog/static/4401752620105256371802/
用__call()实现方法重载 :
<?php
class foo {
function __call($name,$arguments) {
print("Did you call me? I'm $name!");
print_r($arguments);
}
} $x = new foo();
$array = array(1,2,2,1984);
$x->doStuff("dfdf");
$x->fancy_stuff($array,"777");
?>
Did you call me? I'm doStuff!Array ( [0] => dfdf ) Did you call me? I'm fancy_stuff!Array ( [0] => Array ( [0] => 1 [1] => 2 [2] => 2 [3] => 1984 ) [1] => 777 )
$arguments 0,1,2,3 分别对应如果没有该函数的三个函数参数。
$name表示缺失的函数名称!
使用 __call 实现“过载”动作
<?php
class Magic {
function __call($name,$arguments) {
if($name=='foo') {
if(is_int($arguments[0])) $this->foo_for_int($arguments[0]);
if(is_string($arguments[0])) $this->foo_for_string($arguments[0]);
}
} private function foo_for_int($x) {
print("oh an int!");
} private function foo_for_string($x) {
print("oh a string!");
}
} $x = new Magic();
$x->foo(3);
$x->foo("3");
?>
class Magic {
function __call($name,$arguments) {
if($name=='foo') {
if(is_int($arguments[0])) $this->foo_for_int($arguments[0]);
if(is_string($arguments[0])) $this->foo_for_string($arguments[0]);
}
} private function foo_for_int($x) {
print("oh an int!");
} private function foo_for_string($x) {
print("oh a string!");
}
} $x = new Magic();
$x->foo(3);
$x->foo("3");
?>
---------- 调试PHP情况 ----------
456
not_exist_fun is called but not exist,U can do it by yourselft.
方法不存在
————————————————————————————————————————————————————————
如果在框架里用它,是这样的,PHP5里有一个反射函数,进行autoload进相关文件,后对该类的Obj进行:Obj->fun();
如果这个fun不存在就调用这个__call,这个call是上层类,其autoload时new的是这个继承的类名,于是有,如下伪代码:
PHP DIO Extension: Looking for beta testers阅读全文
背景:smarty自己也能实现cache,这块于nginx的cache模块不一样,它能实现一个页面某些地方(块)用上cache,有些用不上,实现灵活控制。
一)
框架里一般写成配置文件:
./libraries/smarty/Smarty.class.php
/**
* This enables template caching.
* <ul>
* <li>0 = no caching</li>
* <li>1 = use class cache_lifetime value</li>
* <li>2 = use cache_lifetime in cache file</li>
* </ul>
* @var integer
*/
var $caching = 0;
var $cache_dir = 'cache';
var $cache_lifetime = 3600;
二)配置文件,只配置路径,而不配置caching 值,在初始化时决定:
[codes=php]
<?php
defined('SYS_PATH') OR die('No direct access allowed.');
return array (
'templates_ext' => 'html',
'template_path' => APP_PATH. 'views/',
'cache_path' => DATA_PATH. 'cache/smarty_cache/',
'compile_path' => DATA_PATH. 'cache/smarty_compile/',
'configs_path' => DATA_PATH. 'config/',
'left_delimiter' => '<{',
'right_delimiter' => '}>',
);
[/codes]
三)smarty 默认是不cache的
./libraries/smarty/Smarty.class.php:
[codes=php]
var $caching = 0;
[/codes]
阅读全文
一)
框架里一般写成配置文件:
./libraries/smarty/Smarty.class.php
/**
* This enables template caching.
* <ul>
* <li>0 = no caching</li>
* <li>1 = use class cache_lifetime value</li>
* <li>2 = use cache_lifetime in cache file</li>
* </ul>
* @var integer
*/
var $caching = 0;
var $cache_dir = 'cache';
var $cache_lifetime = 3600;
二)配置文件,只配置路径,而不配置caching 值,在初始化时决定:
[codes=php]
<?php
defined('SYS_PATH') OR die('No direct access allowed.');
return array (
'templates_ext' => 'html',
'template_path' => APP_PATH. 'views/',
'cache_path' => DATA_PATH. 'cache/smarty_cache/',
'compile_path' => DATA_PATH. 'cache/smarty_compile/',
'configs_path' => DATA_PATH. 'config/',
'left_delimiter' => '<{',
'right_delimiter' => '}>',
);
[/codes]
三)smarty 默认是不cache的
./libraries/smarty/Smarty.class.php:
[codes=php]
var $caching = 0;
[/codes]
阅读全文
胡适年轻时代的留学日记
7月4日
新开这本日记,也为了督促自己下个学期多下些苦功。先要读完手边的莎士比亚的《亨利八世》……
7月13日
打牌。
7月14日
打牌。
7月15日
打牌。
7月16日
胡适之啊胡适之!你怎么能如此堕落!先前订下的学习计划你都忘了吗?
子曰:“吾日三省吾身。”…不能再这样下去了!
7月17日
打牌。
7月18日
打牌。
.
.
.
7月4日
新开这本日记,也为了督促自己下个学期多下些苦功。先要读完手边的莎士比亚的《亨利八世》……
7月13日
打牌。
7月14日
打牌。
7月15日
打牌。
7月16日
胡适之啊胡适之!你怎么能如此堕落!先前订下的学习计划你都忘了吗?
子曰:“吾日三省吾身。”…不能再这样下去了!
7月17日
打牌。
7月18日
打牌。
.
.
.
在我们认真阅读了毛泽东的军事著作过后,仔细反嚼,只要我们对孙子兵法熟黯的人就不难发现——毛泽东的军事思想只是孙子兵法繁衍物。
孙子兵法核心是:
“计利以听,乃为之势,以佐其外。势者,因利而制权也”——
在有利的情况下,制造一种形势。形势,就是根据条件而控制主动权。
孙子兵法的军事措施是:
“~~~~~~攻其不备,出其不意~~~~~~”
孙子兵法的军事要决是:
“~~~~~~贵胜,不贵久~~~~~~”
孙子兵法的军事谋略是:
“~~~~~~不战而屈人之兵~~~~~~”
孙子兵法的用兵打仗的前提是:
“~~~~~~知彼知己~~~~~~”
孙子兵法的军事法则是:
“~~~~~~胜可知而不可为~~~~~~”
孙子兵法对指挥员的要求是:
“~~~~~~求之于势,不则于人~~~~~~”
孙子兵法的攻防思想是:
“~~~~~~攻其所不守~~~~~~守其所不攻~~~~~~”
孙子兵法的战术思想是:
“~~~~~~以迂为直,以患为利~~~~~~”
毛泽东同志在军事上的卓越成就其指导思想无外于孙子兵法的以上内容。
毛泽东同志在条件无限艰险的情况下,其能够让日本受挫,国民党兵败,美国联军在朝鲜重创,印度退守~~~~~~
而现在我们的政府却对我区区一黎民百姓所写的《美国对中国军事打击的战略`战术
》无以为策——删除我的博文,封闭我的博客等等。
真是:
~~~~~~前不见古人,后不见来者~~~~~~独怆然而泪下啊~~~~~~
我目前知道两种php实现多线程的方式,现在贴出来,大家互相学习。阅读全文
[/home/karlwu/qdkj/src]# lsof|grep httpd|grep qdkj
httpd 3255 root 46w REG 8,1 216486 113428 /tmp/apache_qdkj.log
httpd 3255 root 155w REG 8,1 216486 113428 /tmp/apache_qdkj.log
httpd 3255 root 211w REG 8,1 216486 113428 /tmp/apache_qdkj.log
httpd 5832 nobody 46w REG 8,1 216486 113428 /tmp/apache_qdkj.log
公司经常做压力测试,因此我写了一个脚本。记录系统的性能信息,以便以后进行分析。很不错的脚本哦!希望给想监控系统状态的朋友们节省一些时间。阅读全文
商业需求对数据库的影响是第一位的,一个不是很合理的需求可能会整死你的数据库。
一个很简单的例子:
实时的统计论坛有多少帖子。真的需要实时吗?如果数据量小的时候实时似乎没有多大的影响。如果数据量大的话,对数据库可以说是一个不小的冲击。
解决的办法是建立一个统计表,只有一条记录一个字段就是论坛帖子的总数。但如果是在高峰期的时候,每秒钟有好多的帖子可能又会带来新的问题。
仔细分析一下确实需要实时统计吗?有多少人真正会关心这个数字?
换个角度,如果不需要实时的更新,每隔一段时间刷新这个数字到统计表中,性能提高的不是一点半点。
总结一下:其实好多地方都可以使用这种方法的。比如说分页,到一定程度用户会关心有多少页吗?
遇到这种问题的时候有两个问题可以反问我们自己:
1:真的需要实时吗?
2:用户真的关心吗?
如果处理好了,在这些方面数据库可能会表现的更加出色。
所以在一个新的项目货产品上线前,你和项目经理或产品经理分析一下这些情况,没准他们会采纳你的要求的。
来源:http://blog.sina.com.cn/s/blog_4d8a2c970100fcy6.html
一个很简单的例子:
实时的统计论坛有多少帖子。真的需要实时吗?如果数据量小的时候实时似乎没有多大的影响。如果数据量大的话,对数据库可以说是一个不小的冲击。
解决的办法是建立一个统计表,只有一条记录一个字段就是论坛帖子的总数。但如果是在高峰期的时候,每秒钟有好多的帖子可能又会带来新的问题。
仔细分析一下确实需要实时统计吗?有多少人真正会关心这个数字?
换个角度,如果不需要实时的更新,每隔一段时间刷新这个数字到统计表中,性能提高的不是一点半点。
总结一下:其实好多地方都可以使用这种方法的。比如说分页,到一定程度用户会关心有多少页吗?
遇到这种问题的时候有两个问题可以反问我们自己:
1:真的需要实时吗?
2:用户真的关心吗?
如果处理好了,在这些方面数据库可能会表现的更加出色。
所以在一个新的项目货产品上线前,你和项目经理或产品经理分析一下这些情况,没准他们会采纳你的要求的。
来源:http://blog.sina.com.cn/s/blog_4d8a2c970100fcy6.html
总体来讲有以下因素影响mysql的性能 :
1:商业需求
2:系统架构及实现
3:scheme的设计
4:sql query语句
5:硬件系统环境
从以上的顺序,就应该能够看出那些方面对mysql性能影响是最大的。调整mysql时应该遵从以上的顺序。
在接下来的一些文章中,我会详细的讲解以上几点对mysql的影响。
来源:
http://blog.sina.com.cn/s/blog_4d8a2c970100fcxd.html
1:商业需求
2:系统架构及实现
3:scheme的设计
4:sql query语句
5:硬件系统环境
从以上的顺序,就应该能够看出那些方面对mysql性能影响是最大的。调整mysql时应该遵从以上的顺序。
在接下来的一些文章中,我会详细的讲解以上几点对mysql的影响。
来源:
http://blog.sina.com.cn/s/blog_4d8a2c970100fcxd.html