【转载】MySQL 数据库性能优化之缓存参数优化
在平时被问及最多的问题就是关于 MySQL 数据库性能优化方面的问题,所以最近打算写一个MySQL数据库性能优化方面的系列文章,希望对初中级 MySQL DBA 以及其他对 MySQL 性能优化感兴趣的朋友们有所帮助。
数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作。而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级。所以,要优化数据库,首先第一步需要优化的就是 IO,尽可能将磁盘IO转化为内存IO。本文先从 MySQL 数据库IO相关参数(缓存参数)的角度来看看可以通过哪些参数进行IO优化:
如何使用C++开发PHP扩展(下)
上文中介绍了使用C++编写简单PHP扩展的方法,但是更多的情况是业务中已经有独立的 api 库,形式为 libxxx.a / libxxx.so,PHP程序中需要调用这些 api,所以这时就要编写PHP扩展来实现。这时是使用静态库 libxxx.a ,还是使用 libxxx.so 呢 ?常见的做法是使用静态库 libxxx.a ,下面一步一步介绍:
如何使用C++开发PHP扩展(上)
目前,PHP编程语言也是相当成熟,各种文档,各种问题,只要Google一下,总有你想要的答案。当然“如何开发PHP扩展”的文章也不少,但是很少有专门来介绍使用C++开发PHP扩展的介绍。C++编程语言功能的强大,促使好多公司后台程序选择使用它,因此碰到的大多数情况是需要我们用C++来扩展 PHP。PHP源码中的扩展骨架工具,默认生成的是支持 C 语言,如果要使用C++开发,有些参数需要另行配置。下面将用一个简单的示例来说明。
编译PHP扩展的两种方式
编译的两种方式其实很简单,这里记录只是为了以后遇到这种情况时不加思索地运用上,而不是花费一些时间去回忆。
C/C++程序编译有两种方式:动态编译、静态编译。PHP 是使用 C/C++程序开发的一门脚本语言,其扩展编译也就脱离不了前面提到的两种,动态、静态。站在PHP程序的角度,动态编译就是扩展生成一个 .so 文件,然后在 php.ini 中加载这个 .so 文件,此时即可调用其中的函数或者是类方法;静态编译就是在安装 PHP 时把其扩展文件内容编译到 PHP 内部,然后不需要做任何事情,就可以直接调用其中的函数或者还是类方法。这二者有什么优缺点呢?采用静态编译方式,程序在调用其函数/类方法时要快一些;采用动态编译方式,在有新扩展需要添加到PHP中时不需要重新编译PHP,只需要编译该扩展下的文件,然后把 .so 文件引入即可。二者均有利弊,使用时视情况而定是最好的方法。下面用Linux 平台下的操作来说明其编译过程。
获取客户端IP用什么方式?
在这个灌水盛行的年代,我们必须要对那些心怀不轨,总是想着做点啥坏事的青年们,致以亲切的祝福:最近还好吗,是不是闲的蛋疼。
本博客使用Typecho 程序搭建,添加验证码插件后,垃圾评论还是有不少。隔个5-6天就有20多条,前几天修正了验证码插件当中的一个bug,稍微减缓了一点,不过还是有一些。这里就再对后台 “同一IP发布评论的时间间隔限制为N分钟”这个功能动点手脚吧。首先要说明的是,这个功能并不能阻挡这些“灌水青年”的恶劣行为,这是因为基于Typecho程序,这个IP可以伪造,致使上面的设置起不到作用。但是这并不能认为是Typecho的bug,因为当你了解了它的用意之后就会明白。
程序员如何面对需求变化
在工作中也接触过各种各样的项目,有的注重时间,有的注重质量,有的注重成本。有些项目会随着时间的推移侧重点会有所改变,比如刚开始可能注重质量、后来开始注重成本、最后可能注重时间,因此在这个变化中项目经理为了整体把控好这个项目,一些需求的变动也是再所难免。即使没有上面说的这些情况,一个项目从开始到结尾,需求的变化肯定是会有的。对于互联网行业,一个新产品的出现往往会立为一个项目,这里主要也是针对这样项目来进行描述。产品需求需求变化意味着什么,意味着程序要要不停的修改之前编写的代码,同时也就意味着不能按时下班。那么程序员怎么才能够更好的应对产品的这些快速的需求变化呢?于是乎,业界的高人提到了敏捷、迭代,但是真正能运用好,还是要经过千锤百炼。