2013年7月 的存檔

mysql partition 功能

2013年7月30日 沒有評論

自mysql 5.1.3起開始支持分區功能。mysql表中存儲的記錄和表對應的索引信息,最后都是以文件的方式存儲在計算機的硬盤上的,有了分區功能,就可以按照一定的分區規則把這些記錄分布到不同的數據文件上,目前分區規則有四種,分別是RANGE、LIST、HASH和KEY,另外通過DATA DIRECTORY和INDEX DIRECTORY選項可以把不同的分區數據文件分散到不同的磁盤上,從而進步一提高系統的IO吞吐量。因此按照業務邏輯設計好了分區,可以大大提高查詢效率,而且刪除數據可能也會很容易。但是分區也有一些限制:1、主鍵或者唯一索引必須包含分區字段;2、只能通過int類型的字段或者返回int類型的表達式來分區;3、單表最多只能有1024個分區。

默認mysql是開啟了分區功能的,可以通過下述查詢查看結果:

show variables like '%partition%';

+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| have_partitioning | YES   |
+-------------------+-------+

//YES 表示開啟

下面也range規則為例介紹一下分區常用的命令。

1、創建分區。可以在創建表的同時創建,也可以在表創建后追加分區。

drop table if exists `netingcn_com`;
create table `netingcn_com` (
  `id` int(11) unsigned not null auto_increment,
  `day` int(11) not null default 0,
  primary key (`id`, `day`)
) engine=innodb default charset=utf8 auto_increment=1;

alter table `netingcn_com` partition by range(`day`) (
  partition p_2012 values less than (20130000),
  partition p_2013 values less than (20140000)
);
或
drop table if exists `netingcn_com`;
create table `netingcn_com` (
  `id` int(11) unsigned not null auto_increment,
  `day` int(11) not null default 0,
  primary key (`id`, `day`)
) engine=innodb default charset=utf8 auto_increment=1 
 partition by range(`day`) (
  partition p_2012 values less than (20130000),
  partition p_2013 values less than (20140000)
);

可以explain命令查看分區是否創建成功
explain partitions select * from netingcn_com where day = 20130412;
+----+-------------+--------------+------------+-------+
| id | select_type | table        | partitions | type  |
+----+-------------+--------------+------------+-------+
|  1 | SIMPLE      | netingcn_com | p_2013     | index |
+----+-------------+--------------+------------+-------+

2、增加或刪除分區。注意:刪除分區的同時,該分區的所有數據也會別刪除。

增加分區
alter table netingcn_com add partition (
  partition p_2014 values less than (20150000)
);

刪除分區
alter table netingcn_com drop partition p_2012;

3、重新分區。注意:hash和key分區規則不能用REORGANIZE來重新分區

alter table netingcn_com reorganize partition p_2013,p_2014 into (partition p_2014 values less than (20150000));

更多關于mysql 分區功能可以參考:http://dev.mysql.com/tech-resources/articles/mysql_55_partitioning.html

分類: MySQL 標簽: , ,

Strict Standards: Only variables should be passed by reference in

2013年7月28日 沒有評論

php中使用內置的reset函數可以獲取array的第一個元素的值。例如:

$arr = array('one', 'two', 'three');

echo reset($arr);   // 輸出的結果為 one

對于下述代碼,如果php開啟了“Strict Standards”,將會看到“Strict Standards: Only variables should be passed by reference in”的提示。

$str = 'netingcn.com';

echo reset(explode('.', $str));

為什么會這樣呢?可以先看看reset函數的定義:

function reset (array &$array) {}

從定義中可以看到,reset接受的參數是一個array的引用。而上述代碼中explode返回值不是任何array的引用,所以在“Strict Standards”下會有上述提示。解決辦法很簡單,只需要把reset(explode(‘.’, $str))分兩步寫即可。第一步先把explode的返回值賦給一個變量,第二步把這個變量作為reset參數。

出現上面的提示的不只是reset函數,只要參數接受的是對象引用,而傳值直接使用function返回值都會看到那樣的提示。例如內置的array_pop、shuffle、curent、next、prev、next等等。

分類: PHP 標簽:

javascript window.open 父子窗口通訊

2013年7月27日 沒有評論

js中可以使用window.open來彈出一個新窗口。例如一下代碼可以彈出一個居中的窗口:

var __popupReference = null;

function openExplorerPopUp(url, width, height) {
    if (isNaN(width)) {
        width = 1000;
    }
    
    if (isNaN(height)) {
        height = screen.height * 0.8;
    }

    x = (screen.width - width) / 2;
    y = (screen.height - height) / 2;

    if ((null != __popupReference) && (undefined != __popupReference)) {
        __popupReference.close();
    }
    
    if (url.length > 0) {
        var style = "toolbar=no,location=no,directories=no,menubar=no,scrollbars=no,resizable=no,status=no,width=" + width + ",height=" + height + ",left=" + x + ",top=" + y;
        __popupReference = window.open(url, '', style);
        
        try {
            if (window.focus()) {
                __popupReference.focus();
            }
        } catch(e) {}
    }
}

如何讓父窗口和彈出的新窗口進行通訊呢?下面分別闡述。

先看父窗口與子窗口如何通訊。注意上面代碼中有一行“__popupReference.close();”,其用途就是用于關閉彈出的窗口,我們知道在js中可以使用window.close()來關閉當前窗口,通過行為可以得出__popupReference對象其實就是window對象結論,只不過是子窗口的。所以window.open返回值也就是子窗口的句柄了,有了這個句柄,在父窗口就可以操作子窗口的DOM、js定義的function等。例如:__popupReference.document.getElementById(‘subDomId’).style.display = ‘none’; __popupReference.subWinDefineFunction()。

在子窗口中只要能拿到父窗口的句柄,那么就能進行通訊。在內置的window對象中有一個opener屬性,就是其父窗口的句柄。有了這個,通訊就很容易了。例如:
window.opener.getElementById(‘parentDomId’).style.display = ‘none’; window.opener.parentDefineFunction();

分類: web前端 標簽:

mysql 清除relay-log文件

2013年7月22日 沒有評論

今天在本機的mysql數據目錄下發現了許多類似hostname-relay-bin.0000*的文件,該文件一般是在mysql slave實例上存在。主要用途是記錄主從同步的信息,正常情況下會自動刪除的。

本機未配置過master、slave,對于其來源還真不太清楚。既然是用在slave上的,那就可以放心的刪除。刪除master實例上的日志文件用reset master,對于slave實例就使用命令:

reset slave
分類: MySQL 標簽:

mysql 關閉 bin-log 日志

2013年7月22日 1 條評論

當開啟bin-log日志時,會生成很多mysql-bin.0000*類似的文件,而且可能會占用很大的硬盤空間。對于自己的測試機器或硬盤比較緊張的vps,而又不需要做master,slave的配置,完全可以關閉日志功能。

關閉操作很簡單,找到配置文件my.cnf,對于linux,一般默認在/etc目錄下,打開此文件,使用井號(#)注釋掉如下兩個配置項目即可。

log-bin=mysql-bin
binlog_format=mixed

配置修改好后需要重啟mysqld服務才能生效。可能在重啟時候會收到一個錯誤,“ERROR 1186 (HY000): Binlog closed, cannot RESET MASTER”,解決辦法是先登入到mysql命令行中執行 reset master 即可。reset master的用途就是刪除先前所以的bin-log日志文件。所以在master、slave配置環境中慎用此命令。

分類: MySQL 標簽:

也談empty與isset區別

2013年7月19日 沒有評論

empty是判斷變量值是非空或非零的值。對應空定義包括:“”(空字符串)、0、“0”、NULL、FALSE、array()和$var(只聲明但未賦值)。也就是說當變量值為上述這些,empty返回TRUE,其他的都返回FALSE。

isset是檢測變量是否設置,并且不是 NULL。變量設置可以從幾個方面來說。1:最簡單的就是變量是否先聲明和賦值;2:array中是否存在對應的index或key;3:object中是否存在對應的屬性。

從上面的兩個function定義可以看到,在某些情況下,兩者可以公用,但其區別還是很大的。另外它們都只能檢測變量,檢測任何非變量的東西都將導致解析錯誤。例如直接檢查另一個function的返回值(empty(otherFunction())),你將看到“Fatal error: Can’t use function return value in write context in”這樣的錯誤。

另外isset可以一次檢查多個變量,例如:isset($var1, $var2, $var3),當這三個值分別的isset都為TRUE結果為TRUE,否則結果為FALSE。

測試代碼:

$sep = "<br />";

echo 'test undeclared var empty : ';
var_dump(empty($var));	// TRUE
echo $sep . 'test undeclared var isset : ';
var_dump(isset($var));	// FALSE

$var;
echo $sep . 'test declared var but no set value empty : ';
var_dump(empty($var));	// TRUE
echo $sep . 'test declared var but no set value isset : ';
var_dump(isset($var));	// FALSE, 變量申明未賦值,默認值為NULL

$var = NULL;
echo $sep . 'test declared var and set value NULL empty : ';
var_dump(empty($var));	// TRUE
echo $sep . 'test declared var and set value NULL isset : ';
var_dump(isset($var));	// FALSE, 變量申明賦值為NULL

$var1 = ''; $var2 = '0'; $var3 = 0; $var4 = FALSE; $var5 = array();

echo $sep . 'test \'\' empty : ';
var_dump(empty($var1));	// TRUE
echo $sep . 'test \'0\' empty : ';
var_dump(empty($var2));	// TRUE
echo $sep . 'test 0 empty : ';
var_dump(empty($var3));	// TRUE
echo $sep . 'test FALSE empty : ';
var_dump(empty($var4));	// TRUE
echo $sep . 'test array() empty : ';
var_dump(empty($var5));	// TRUE
echo $sep . 'test \'\', \'0\', 0, FALSE, array() isset : ';
var_dump(isset($var1, $var2, $var3, $var4, $var5));	// TRUE,  變量申明并賦值為空字符串

輸出的結果為:

test undeclared var empty : bool(true)
test undeclared var isset : bool(false)
test declared var but no set value empty : bool(true)
test declared var but no set value isset : bool(false)
test declared var and set value NULL empty : bool(true)
test declared var and set value NULL isset : bool(false)
test '' empty : bool(true)
test '0' empty : bool(true)
test 0 empty : bool(true)
test FALSE empty : bool(true)
test array() empty : bool(true)
test '', '0', 0, FALSE, array() isset : bool(true)
分類: PHP 標簽:

用css設置cellspacing

2013年7月16日 沒有評論

html的table標簽中單元格之間默認是有一個像素的間距,且是使用白色填充的。所以對于要對tr使用非白色背景時,顯示效果就很糟糕。可以使用table的cellspacing屬性來設置單元格之間間距,例如:cellspacing=“0”,就能取消單元格之間的間距。 cellspacing是table的屬性,不能使用在css中,如果要在table中控制單元格的間距,則是使用border-spacing,如:

border-spacing: 0;
分類: web前端 標簽:

chrome切換hosts插件 hostsadmin

2013年7月16日 沒有評論

HostAdmin是一款chrome插件,可以用于快速修改hosts文件中配置,達到切換域名對應的IP,真是WEB開發者的利器。例如需要把某個web應用的域名指向到本地的測試環境,只需要點幾下鼠標即可搞定。另外對于chrome,修改后立馬生效,不需要重新啟動瀏覽器。經測試該插件可以正常工作在Win XP和Mac osx中。

安裝方法很簡單,方法1:訪問地址:https://chrome.google.com/webstore/detail/hostadmin/oklkidkfohahankieehkeenbillligdn,在出現的頁面中點擊“添加至 CHROME”按鈕即可完成安裝;方法2:進入chrome store,輸入 hostsadmin 查詢,也可以找到該擴展程序,然后選定該擴展進行安裝。

安裝成功后,chrome的右上角會出現一個小圖標,如下圖:

點擊小圖標后列出系統hosts文件中的所有IP域名配置信息,如下圖:

IP前面打勾表示啟用該配置,可以通過點擊來進行開啟和關閉切換。另外點擊上方的“editor”按鈕,可以在瀏覽器中打開hosts文件,并且對其進行添加、刪除和更新操作。

分類: web前端, 其它 標簽:

linux下批量替換文件中的內容

2013年7月15日 沒有評論

對于單個文件,使用sed命令很容易做到。如果需要替換某個指定文件夾下所有文件,借助grep和sed組合成一條命令也可以輕松搞定。grep命令可以查找單個文件或文件夾下文件中的內容,使用參數“r”或“-R”可以遞歸查找指定文件夾下的所有文件;參數“l”可以讓grep輸出包含指定字符串的文件名,首次匹配成功后立刻停止對同文件的查詢。如果不使用“l“,grep查詢單個文件時輸出文件中所有包含指定字符串的行,對文件夾查詢時則按照“文件名:包含字符串行”的方式輸出。

有了上面提到的知識,執行批量替換的命令可以寫為:

grep "netingcn" -rl /assign-path | xargs sed -i 's/netingcn/www\.netingcn/g' 
或
sed -i 's/netingcn/www\.netingcn/g' `grep "netingcn" -rl /assign-path`

還有一種比較復雜的寫法:

grep "netingcn" * -R | awk -F: '{print $1}'  | sort | uniq | xargs sed -i 's/netingcn/www\.netingcn/g'

其中命令awk用于分割字符串、uniq對結果進行除重。

分類: Linux 標簽:

sed command a expects followed by text

2013年7月15日 沒有評論

在mac osx lion中sed來進行文件內容的替換操作,使用命令為:

sed -i 's/oldstring/newstring/g' full-path-file

執行后提示出錯,錯誤信息為:“sed: 1: command a expects \ followed by text”,但是相同的命令拿到centos下確能執行成功。 使用man查看命令的參數詳細說明,兩個系統下對參數“i”的要求不一樣。
mac osx中為:

-i extension
  Edit files in-place, saving backups with the specified extension.  If a zero-length extension is given, no backup will be saved.
  It is not recommended to give a zero-length extension when in-place editing files, as you risk corruption or partial content in situations where disk space is exhausted, etc.

centos中為:

-i[SUFFIX], --in-place[=SUFFIX]
  edit files in place (makes backup if extension supplied)

參數“i”的用途是直接在文件中進行替換。為防止誤操作帶來災難性的后果,sed在替換前可以自動對文件進行備份,前提是需要提供一個后綴名。從上面對參數“i”的詳細說明中可以看到,mac osx下是強制要求備份的(當然也可以使用空字符串來取消備份),但centos下是可選的。

如果不需要備份文件,mac osx下可以使用如下命令完成替換操作:

sed -i '' 's/oldstring/newstring/g' full-path-file

例子:
cd /tmp
echo "netingcn.com" > sed_test.txt
cat sed_test.txt
sed -i '' 's/netingcn/www\.netingcn/g' sed_test.txt
cat sed_test.txt
rm -rf sed_test.txt
cd -
分類: Linux 標簽: ,

無覓相關文章插件,快速提升流量

30选5怎么中奖