Octopress 部落格

一個靜態網站的部落格框架

MySQL 資料表格式 InnoDB 與 MyISAM 的比較

MyISAM :
1.效能優,預設引擎,為 Mysql最早使用的引擎
2.使用MyISAM將具備三種 檔案:.frm (table format) .MYD(data file) .MYI(index file)
3.所有資料是以low byte first儲存,數字型key是以high byte first儲存以利索引
4.支援大檔 ( > 63 bit)
5.支援42億(2^32次方) 資料筆數,如果MySQL編譯有加入–with-big-tables 選項可支援多一倍(2^32次方 * 2)資料量
6.不支援事務處理,例如關聯式 資料庫
7.AUTO_INCREMENT 更快(至少10%),序列的值被刪除之後就不能再利用

InnoDB:
1.具備Commit, Rollback和當掉復原的事務處理能力,可保護使用者資料
2.可進行row-level的 鎖定同時維持nonlocking reads,以支援多人同時連線狀態
3.可支援FOREIGN KEY
4.InnoDB是專門為了大容 量資料的最大效率進行設計的,CPU效能是其他的disk-based資料庫引擎所不及的
5.InnoDB儲存他的表和 index在一個表空間中,此表空間可能包含幾個檔(有可能在不同disk partitions),此點和MyISAM不同,MyISAM是一個表一個檔案,這差一點造成InnoDB表個可以非常大,即使是超過系統的file size(例如2GB)都可處理
6.此為Windows安裝檔的 默認值
7.InnoDB上可處理存儲超 過1TB的數據,可支援例如平均每秒800次插入/更新的負荷
8.支援關聯資料庫

InnoDB使用上的限制:
1.不要將MyISAM轉成InnoDB table
2.不要在NFS格式上將 InnoDB設定成data files或log file,檔案容易被鎖住
3.一個表不能包含超過1000 欄
4.內部key最大長度為 3500 bytes,MySQL限制為3072 Bytes
5.每筆資料最長約為8000 Bytes,變長的欄位(例如Varchar/BLOB/TEXT)需小於4000 Bytes.
6.即使InnoDB支援row size大於65535,也不能定義一個包含VARBINARY/VARCHAR的欄位總合大於65535 (會出現錯誤訊息)
7.在依些舊系統中,檔案需小於 2GB,這並不限制InnoDB的使用,但你如果需要大的tablespace則需額外進行設定
8.InnoDB的log file總共大小需小於4GB
9.最小的tablespace 大小為10MB,最大的大小為64TB,這也是table的最大值
10.不支援FULLTEXT
11.InnoDB不保留每個表 個的總數統計,也就是count(*)則必須進行index計算
12.在InnoDB 中,AUTO_INCREMENT欄位如果存在,則”必須”定義一個index欄位包含AUTO_INCREMENT欄;在MyISAM 中,AUTO_INCREMENT欄位”可能”為index中的一欄
13.DELETE FROM Table為逐筆資料刪除,非整個table刪除
14.在InnoDB 中,TRUNCATE Table

Memory(相同於HEAP):
1.將所有數據保存在RAM中, 可提供極快的訪問,但如果關機資料就會消失無法儲存
2.每一個MEMORY Table關聯一個Disk file(.frm)
3.常使用在 create temporary table上,連線結束後就釋放空間
4.預設使用hash indexes(速度非常快且對於建立臨時表格非常有效)
5.MEMORY不支持BLOB 或TEXT列
6.MEMORY使用定長的儲存 格式列
7.可支援 AUTO_INCREMENT

項目 MyIASM InnoDB Memory
空間限制 64TB 記憶體
transaction x x
大量 Insert 速度
設置外來鍵 x x
鎖定層級 資料表 資料列 資料表
二元樹索引 不知
雜湊索引 x
全文搜尋索引 x x
資料壓縮 x x
資料快取 x
索引快取
記憶體佔用
磁碟佔用 x

參考連結:
http://miggo.pixnet.net/blog/post/30855147
http://blog.roga.tw/2008/11/mysql-資料庫儲存引擎的選用/

CentOS 服務版本查詢

CentOS 的服務版本查詢指令:

1. 查看 Linux Kernel 版本
$uname -r

2. 查看 CentOS 版本
$cat /etc/redhat-release

3. 查看 PHP 版本
$php -v

4. 查看 MySQL 版本
$mysql -v

5. 查看 Apache 版本
$rpm -qa httpd

參考網址: http://lifetype.phc.edu.tw/2_elifetyeaieia/archive/640_centos_caue.html

Comments

Gigo is the best.
查詢PHP版本:

php -v


查詢MySQL版本:

mysql -V


差異在於大小寫……

DRBD & Heartbeat & Mysql

參考網址:
http://wiselysong.blogspot.com/2009/01/heartbeatdrbdmysql-on-debian-etch.html
目前這種機制, 最好安裝在 CentOS 上面.
DRBD: 分散式儲存系統(在 Master 和 Slave 的機器上, 會有兩個一樣大的空間, 存在著相同的資料)
Heartbeat: 產生 Virtual ip, 監測 mysql 的狀態, 如果 Master 掛了, 沒辦法連線, 將會把 Master Mysql Stop 後, umount DRBD, DRBD再連到 Slave, Slave mount DRBD, Slave Mysql Start.
在CentOS 上面, 可以用以下語法觀看目前的狀況:
1. service mysqld status
2. service drbd status
3. service heartbeat status
如果要停止. 可以下以下語法:
1. service mysqld stop
2. service drbd stop
3. service heartbeat stop

簡單的C++ Hello World 程式


// SampleConsoleApp.cpp

#include <iostream> // Basic input and output library

int main()
{
std::cout << "Hello World\n";
return 0; // Return to the operating system
}

// 編譯方式:
C:\MinGW\bin\g++.exe SampleConsoleApp.cpp -o SampleConsoleApp

VIM Tip

顯示檔案列表, 輸入 :Explore 或 :Sexplore

自動換行模式, 有些字元顯示成@符號, 如何顯示實際的內容呢?
set display=lastline

Vim Tip

最近又將VIM拿出來把玩一下, 有些指令忘記了, 要記錄一下

要將程式的Function折疊, 輸入 zc
要將折疊的程式打開, 輸入 zo

多視窗的切換, 輸入 Ctrl+w + Ctrl+w

複製單行, 輸入 yy

貼上單行, 輸入 pp

Vim Tips

VIM 多檔編輯:

開啟多的檔案後, 如果要看有哪些檔案, 可輸入
:ls

要看下個檔案, 可輸入
:bn

要看最後開的檔案, 可輸入
:bl

要看指定編號的檔案, 可輸入
:b檔名或編號

要把檔案從 Buffer List 移除, 可輸入
:bd

FreeBSD 修改主機日期

FreeBSD 修改主機日期
# date 1008221153 // 年月日時分(ps:西元年後兩碼)

FreeBSD 的 Console 下軟體

在 FreeBSD 的 Console 下, 有些軟題體蠻好用的, 軟體如下:

Screen: 可以讓程式在背景下執行, 下次進入後程式執行後的結果
Vim: 文字編輯器
ee: 文字編輯器
joe: 文字編輯器
mc: 檔案瀏覽管理程式
vifm: 像vim指令般的檔案瀏覽管理程式
vlock: console下的電腦鎖
zgv: console 下觀看圖檔程式,無法在AMD的機器上執行, 且一定要在終端機前才可操作, 無法由putty連入操作

使用 MinGW 編譯 C++ 紀錄

1. windres Lession5.rc Lession5.o
2. g++ -o Lession5.exe Lession5.c Lession5.o
3. g++ -o sample01 sample01.cpp -mwindows (-mwindows 是在windows下執行exe檔案時,不會在跳出一個Console的視窗)

// g++ dos(使用 Notepad++ NppExec 套件的紀錄)
C:\MinGW\bin\g++.exe “$(FULL_CURRENT_PATH)” -o $(NAME_PART)

// g++(使用 Notepad++ NppExec 套件的紀錄)
C:\MinGW\bin\g++.exe “$(FULL_CURRENT_PATH)” -o $(NAME_PART) -mwindows -Wall( -Wall 會顯示程式中是否有無效的參數或函式)

// g++ & rc & comctl32(使用 Notepad++ NppExec 套件的紀錄, 使用Window控制項)
C:\MinGW\bin\windres.exe $(NAME_PART).rc -o $(NAME_PART).o
C:\MinGW\bin\g++.exe “$(FULL_CURRENT_PATH)” -o $(NAME_PART) $(NAME_PART).o “C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib\comctl32.lib” -mwindows -Wall

// g++ & rc(使用 Notepad++ NppExec 套件的紀錄)
C:\MinGW\bin\windres.exe $(NAME_PART).rc -o $(NAME_PART).o
C:\MinGW\bin\g++.exe “$(FULL_CURRENT_PATH)” -o $(NAME_PART) $(NAME_PART).o -mwindows -Wall

// g++ & lib(使用 Notepad++ NppExec 套件的紀錄, 使用Windows Timer套件)
C:\MinGW\bin\g++.exe “$(FULL_CURRENT_PATH)” -o $(NAME_PART) “C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib\WinMM.Lib” -mwindows

// C++ 連結 MySQL 的方法(不使用 Visual C++ 和 .net 的方式)
01. 需要上網抓取 mysql-connector-c-noinstall-6.0.2-win32
02. 參考 http://www.programmer-club.com/showSameTitleN/mysql/911.html
03. 參考 http://www.openwebspider.org/documentation/how-to-link-libmysqllib-with-dev-c-or-gcc-under-windows/
04. 產生 libmysql.a 的方式
> reimp.exe <FULL_PATH_OF(MySQL\lib\opt)>libmysql.lib
(^ This command creates: libmysql.def AND libmysql.a)
> dlltool.exe –input-def LIBMYSQL.def –dllname libmysql.dll –output-lib libmysql.dll
(^ this creates libmysql.dll)
05. 將產生的 libmysql.a 拷貝到 MinGW 的 lib 下
06. 在程式中, 需要 include 兩個檔案
#include <winsock.h> // SOCKET TYPE(for mysql.h)
#include <mysql.h>
07. 可以使用以下程式測試連結是否成功??
using namespace std;
int main(void) {
MYSQL my_connection; //This is a SQL connection.
mysql_init(&my_connection); //initinal mysql connection

if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD, DATABASE, 0, NULL, CLIENT_FOUND_ROWS)) { //connect success
cout << “Connection Success!!\r\n”;
mysql_close(&my_connection); //close database connection
} else {
cout << “Connection Fail!!\r\n”;
}
getch();
return EXIT_SUCCESS;
}

08. 編譯檔案的時候, 需要在後面加上 -lmysql -lws2_32, 如下:(使用 Notepad++ NppExec 套件的紀錄)
C:\MinGW\bin\g++.exe “$(FULL_CURRENT_PATH)” -o $(NAME_PART) -I “C:\mysql_c\include” -lmysql -lws2_32
例如: C:\MinGW\bin\g++.exe “C:\portable\C++\WinApp\mysqlconn.cpp” -o mysqlconn -I “C:\mysql_c\include” -lmysql -lws2_32 -mwindows