orczhou

  • logo_mysql_sun_a对于刚刚接触MySQL的用户,如果想用C语言连接MySQL,往往会是一件很麻烦的事情。这里就整理过程做一个详细的说明,以便参考。 (more…)

  • Google Trends数据一瞥

    ·

    logo
    Google除了给我们提供搜索服务之外,还有大大小小很多的有意思的产品,Google Trends就是其中一个。

    前两天beenhero同学花了点时间把Google Trends 每天的热门数据(Hot Trends)全爬过来了,想让我帮忙建立个简单的模型进行一些分析。

    Hot TrendsGoogleTrends根据当天用户搜索的关键字,给出的”搜索关键字”排行榜。为了避免数据平庸(最热门往往类似于”天气”等内容),Google自己已经做了一些处理,偏向于显示突然增长的搜索结果。希望能够根据关键字出现的频率、时间和榜上排名,给出一个GoogleTrends中最受关注的前几名。

    (more…)

  • 分页优化的四种方式

    ·

    很久以前读了一篇关于分页的文章,后来越想越有道理,最近又重新找出来,并做了翻译,原文参考:Four ways to optimize paginated displays.

    翻译背景:在大数据量的情况下,原本很简单的分页如果没有处理好,你会发现分页的请求会消耗你大量的数据库时间。如果你遇到了这个问题,文章给了你几个很好的解决的方案。当然,初学者若能看完这篇文章,那么它会指导你写出更具有扩展性的分页代码。

    全文概述:文中提到了分页的办法总结如下:

    1. 全部缓存查询结果。把查询结果全部缓存起来(例如文件缓存、静态化结果页面等)。
    2. 不详细显示总共有多少分页。这里有两个优化的技巧。其一每次在计算总条目的时候,我就固定查询501条,然后将前500条分页显示好,如果第501条确实存在,那么给出按钮 “查看更多…”(这种情况会很少)。其二,在每次列表本页面的时候,比如第一页我要显示1-20条,那么我查询出1-21条。如果第21条真的存在,我就给出”下一页”按钮,依次类推。
      (more…)
  • 在php中常见的计算字符串长度的函数有:strlen和mb_strlen,下面是对这两个函数的比较说明(编码方式UTF8)

    比较strlen和mb_strlen

    当字符全是英文字符的时候,两者是一样。这里主要比较一下,中英文混排的时候,两个计算结果。(测试时编码方式是UTF8)

    $str='中文a字1符';
    echo strlen($str);
    echo '';
    echo mb_strlen($str,'UTF8');
    //输出结果
    //14
    //6

    结果分析:在strlen计算时,对待一个UTF8的中文字符是3个长度,所以“中文a字1符”长度是 3*4+2=14。

    在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算,所以“中文a字1符”长度是6。

    关于中英文混排串的占位符计算

    利用这两个函数则可以联合计算出一个中英文混排的串的占位是多少(一个中文字符的占位是2,英文字符是1),计算的方法是:如果一个混排字符串有a个中文,b个英文,占位是:

    $str='中文a字1符';
    //计算如下
    echo ( strlen($str) + mb_strlen($str,'UTF8') ) / 2;
    //输出结果
    //10

    例如  “中文a字1符” 的strlen($str)值是14,mb_strlen($str)值是6,则可以计算出“中文a字1符”的占位是 10 。

    最大占位计算

    一般的英文字符占位要比中文小一些,例如,可能两个英文字符的宽度才是一个中文字符的宽度,所以,当我们允许 max 个中文字符宽度的时候,可以使用类似入如下的计算,计算总宽度:

    $$
    3*x + y = \text{strlen} \\
    x + y = \text{mb_strlen} \\
    2x = \text{strlen} – \text{mb_strlen} \\
    x = \frac{\text{strlen} – \text{mb_strlen}}{2} \\
    z*\frac{x}{x+y}*2 + z*\frac{y}{x+y} \le MAX \\
    z \le \frac{MAX*(x+y)}{(2x+y)} = \frac{MAX*(\text{mb_strlen})}{(2x+y)} = \frac{MAX*(\text{mb_strlen})}{( \frac{\text{strlen} + \text{mb_strlen}}{2} )} \\
    = \frac{2*MAX*(\text{mb_strlen})}{( \text{strlen} + \text{mb_strlen} )} \\
    $$