mysql 分区

分区的作用是将一个表或者索引物分解为更小,更可管理的部分, 如果表中存在主键或者是唯一索引时,分区列必须是唯一索引的一部分
比如:
查询数据系统只会获取指定的分区.
数据量会变小
易于管理

查看是否启用分区:

mysql> show plugins;
Name: partition

分区的类型:
range分区: 行数据基于属于一个给定连续区间的列值放入分区, 必须明确的指定一个给定的列值和列值集
list分区:和range分区类似, 只是list分区面向的是离散的值, 必须明确的指定一个给定的列值和列值集
hash分区: 根据用户自定义的表达式返回的值进行分区, 返回的值不能为负数, 目的是将数据均匀的分布在预先定义的分区中
key分区:根据mysql数据库提供的哈希函数来进行分区

查看分区信息: select * from information_schema.PARTITIONS where table_name='sales'
查看sql查询的分区信息:explain partitions select * from mysqltest.sales where date>='2016-01-01' and date<'2017-01-01';
删除分区: alter table sales drop partiion p2018;

用PHP实现一个简单的环形队列

缺少一个好的计时器. 但是功能能正常运行. 替换成一个好的计时器。状态可以保存在DB中.

/**
 * 环型队列.
 * 创建一个环形为3000个元素.
 * 作cron,其中每秒走一个位置.
 */

/**
 * Class Task
 */
class Task
{

    private $TaskId;
    private $Time;
    private $CallBack;
    private $Run;

    public function __construct($TaskId = null, $Time = null, $CallBack = null)
    {
        $this->Run = FALSE;
        $this->SetId($TaskId);
        $this->SetTime($Time);
        $this->SetCallback($CallBack);
    }

    public function SetId($TaskId)
    {
        $this->TaskId = $TaskId;
    }

    public function GetId()
    {
        return $this->TaskId;
    }

    public function SetTime($Time)
    {
        $this->Time = $Time;
    }

    public function GetTime()
    {
        return $this->Time;
    }

    public function SetCallBack($CallBack)
    {
        $this->CallBack = $CallBack;
    }

    public function GetCallBack()
    {
        return $this->CallBack;
    }

    public function Run()
    {
        if (!$this->Run && is_callable($this->GetCallBack())) {
            $this->Run = TRUE;
            $this->GetCallBack();
        }
    }
}

/**
 * Class Mqueue
 *
 * 3000的环形队列.
 *
 */
class Mqueue
{
    private $Queue;
    private $Tasks;
    private $CurrentTask;
    private $QueueLenth = 3000;
    private $CurrentIndex; // 当前为在哪个格子里面.
    private $CurrentNum;  // 当前在第几圈.

    /**
     * Add task.
     *
     */
    public function AddTask(Task $task)
    {
        $this->Tasks[$task->GetId()] = $task;
        $this->CurrentTask = $task->GetId();
        $this->SetQueue($task);
    }

    /**
     * 将任务添加到环中.
     *
     * @param $task
     */
    private function SetQueue($task)
    {
        $postion = $this->GetPosition($task);
        $this->Queue[$postion[1]][$postion[0]][$task->GetId()] = $task;
    }

    /**
     * 计算任务在当前哪个环中.
     *
     * @param $task
     *
     * @return array
     */
    private function GetPosition($task)
    {
        $time = strtotime($task->GetTime()) - time();

        return [
          $time % $this->QueueLenth,
          $this->CurrentNum + floor($time / $this->QueueLenth),
        ];
    }

    private function Timer()
    {
        $this->CurrentIndex = 0;
        $this->CurrentNum = 0;
        $this->Ring();
    }

    public function GetQueue() {
        return $this->Queue;
    }

    /**
     * @TODO Good timer.
     */
    private function Ring() {
        // 每秒跑一格.
        // 到尾了跑第二环.
        for($i = 0; $i <= $this->QueueLenth; $i++) {
            $this->CurrentIndex++;
            if(isset($this->Queue[$this->CurrentNum][$this->CurrentIndex])) {
                $this->Queue[$this->CurrentNum][$this->CurrentIndex]->Run();
            }
            sleep(1000);

            if($this->CurrentIndex <= $this->QueueLenth) {
                $this->CurrentNum++;
                $this->Ring();
            }

        }
    }
}

$task = new Task('thisismyfirsttask', '2017-3-21', function () {
        echo 'hello world';
    }
);

$mq = New Mqueue();
$mq->AddTask($task);
print_r($mq->GetQueue());

大巧若拙,大辩若讷

最有智慧的人,真正有本事的人,虽然有才华学识,但平时像个呆子,不自作聪明;虽然能言善辩,但好像不会讲话一样。无论是初涉世事还是位居高官,无论是做大事还是一般人际关系,锋芒不可毕露。有了才华固然很好,但在合适的时机运用才华而不被或少被人忌,避免功高盖主,才算是更大的才华,这种才华对社会、对人对己才有真正的用处。

Ubuntu 配置SSL+Apache

启用ssl 模块, 并且重启Apache

sudo a2enmod ssl
sudo service apache2 restart

创建SSL密钥和证书保存的目录

sudo mkdir /etc/apache2/ssl

生成一个证书

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

获取一个免费的有效证书https://www.startssl.com/
参考文章:http://blog.nicky1605.com/the-free-ssl-configuration-startssl-on-nginx.html

配置Apache:

sudo vim /etc/apache2/sites-available/default-ssl.conf

以下分别指向你的证书文件

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key

Drupal 压缩文件

// 解压上传的HTML5.使用Update模块函数.
// 确定引用进了函数解压所存在的那个文件
include_once drupal_get_path('module', 'update') . '/update.manager.inc';

// $old_file 是解压的源目录,$extpath 是要解压的
update_manager_archive_extract($old_file, $extpath);

hhvm 安装

https://github.com/facebook/hhvm/wiki/Prebuilt%20Packages%20for%20HHVM

Fedora 20安装
https://github.com/facebook/hhvm/wiki/Prebuilt-Packages-on-Fedora-20