[SQL] MySQL ROW_NUMBER Simulation
Posted on July 15, 2009
| 1 minutes
| 193 words
| appleboy
在台大 PTT Database 版看到有人問一個問題,我覺得還不錯,問題如下:網頁版
小弟在練習做一個系統遇到以下問題 志願 | 系所 | 功能 1 | a | 退選 2 | b | 退選 3 | c | 退選 4 | d | 退選 5 | e | 退選 網頁介面如上(用for迴圈+mysql_fetch_object抓出資料) 報名序號 | 姓名 | 志願1 | 志願2 | 志願3 | 志願4 | 志願5 1001 小王 a b c d e 資料庫欄位內容如上 想請問若使用者想退選志願3~~照理說用update把志願3欄位清掉 網頁再一次抓資料會變成志願3的系所變空的(如下表) 志願 | 系所 | 功能 1 | a | 退選 2 | b | 退選 3 | | 退選 4 | d | 退選 5 | e | 退選 有沒有辦法在select的時候排除空的那欄 也就是說抓資料的時候,以上述為例,只抓出4筆,變成下表 志願 | 系所 | 功能 1 | a | 退選 2 | b | 退選 3 | d | 退選 4 | e | 退選
[Read More][MySQL] 利用 perl 單行印出 my.cnf
Posted on June 17, 2009
| 1 minutes
| 90 words
| appleboy
在 MySQL Performance Blog 裡面發現這篇:How to pretty-print my.cnf with a one-liner,利用一行 perl 指令把 my.cnf 的註解拿掉:
perl -ne 'm/^([^#][^\s=]+)\s*(=.*|)/ && printf("%-35s%s\n", $1, $2)' /etc/my.cnf 輸出為: [client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
key_buffer = 256M
max_allowed_packet = 1M
table_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 16M
thread_concurrency = 8
log-slow-queries = /var/log/mysql/mysql-slow.
[Read More][網站] 好站連結 (二)
Posted on May 28, 2009
| 2 minutes
| 248 words
| appleboy
MySQL count(“欄位”) vs mysql_num_rows 速度?
Posted on March 30, 2009
| 2 minutes
| 227 words
| appleboy
在 FreeBSD ports 裡面還沒看到 chinese/phpbb3 的 ports,目前只有 chinsan 維護的 chinese/phpbb-tw ports,之前版本是 2.0.22 版本,後來我 commit 到 2.0.23 版本,不過 PHPBB 官網已經不再維護或者是開發 2.0.X 版本了,現在以 PHPBB3 為版本開發,也針對了 PHP6 跟 PHP 5 的相容性做了很大的改變,所以基本上如果在 2.0.X 版本加了很多外掛,那就沒辦法升級到 phpBB3 版本了,畢竟 code 實在改變太多了,找個時間把 chinese/phpbb3-tw commit 進去,不然也可以到 www/phpbb3 做安裝。 為什麼會提到 phpBB 呢,今天在 trace phpBB3 的 code,發現原本在 phpBB2 裡面有支援 mysql_num_rows function,用來讓程式可以取出 sql 的個數,不過在 phpBB3 竟然就把這個 function 拿掉了。 phpBB2 mysql4.php 程式:
function sql_numrows($query_id = 0)
{
if( !$query_id )
{
$query_id = $this->query_result;
}
return ( $query_id ) ? mysql_num_rows($query_id) : false;
}
[Read More]mydumper 取代 mysqldump 效能
Posted on March 9, 2009
| 1 minutes
| 134 words
| appleboy
這是我在 gslin 大神 那邊看到的一篇文章:mydumper (取代 mysqldump 的工具),mysqldumper 有平行跟效能方面壓力測試,效果跟時間都壓縮的比 mysqldump 還要快,簡單管理 output 資料,它把 database 每個資料表分別 dump 資料出來寫到檔案,方便觀看檔案資料,不過沒有支援 dump table 的 definitions,所以加速提取 data 寫入到檔案,gslin 大神也把它包進 FreeBSD ports 裡面,在 database/mydumper 這裡。 我想會把這個機制套用到我之前寫的 shell script 裡面:[Linux&FreeBSD] 備份系統資料,MySQL 資料庫,PgSQL 資料庫的自動化 bash shell script 程式,那 mydumper 用法也相當簡單,mydumper –help 就寫的很清楚了,跟 mysqldump 用法差沒多少:
-h, --host 連接到 hostname 伺服器
-u, --user 使用者名稱
-p, --password 使用者密碼
-P, --port MySQL TCP/IP port
-B, --database Database 名稱
-t, --threads Number of parallel threads
-o, --outputdir 輸出的檔案要存放在哪, 預設 ./export-*/
-c, --compress gzip 壓縮每個檔案,多花一點時間
-x, --regex Regular expression for 'db.table' matching
[Read More][MySQL]left, right, inner, outer join 使用方法
Posted on January 24, 2009
| 2 minutes
| 230 words
| appleboy
最近在高雄面試的時候,被問到的資料庫問題,什麼是 left join,out join,inner join,其實這些都是寫基本 SQL 語法需要知道的,當然我比較少用到 out join,不過還是要知道一下比較好喔,底下來說明一下這些,整理一些心得
表格 test1 資料表
表格 test2 資料表
[Read More][MySQL] 實做 MySQL Master-Master Replication 同步
Posted on December 30, 2008
| 2 minutes
| 426 words
| appleboy
今天無聊實做了 MySQL 資料庫同步化,那可以先看看 MySQL Master Slave Replication,中文網站可以上 google 查詢或者是看看這一篇:MySQL 設定 Replication (Master – Slave),基本上設定還蠻容易的,如果會 Master 同步到 Slave 的話,那 MySQL Master-Master 只是在用相同的方法在做一遍,如果不懂 MMM 的可以先參考這一篇:MySQL Master-Master Replication Manager(1) – 簡介,這篇寫的很清楚,今天看了文章,我實做起來,遇到一些問題,其實還蠻奇怪的,所以底下就來紀錄一下步驟,順便也說明一下。 實做兩台 Ubuntu 機器: db1:192.168.1.1 db2:192.168.1.2 先設定 db1: 目前我都是在 Ubuntu 7.10 底下實做的,那基本上只要有支援 MySQL 的 Linux 或者 FreeBSD 機器都可以實做這個方法: 步驟一:先修改 my.cnf 這個檔案: FreeBSD 的話在:/var/db/mysql/my.cnf Ubuntu:/etc/mysql/my.cnf 有的版本是在 /etc/my.cnf 所以不太一定,請依照自己的作業系統 修改:
#
# bind-address 請 mark 起來,因為我們必須讓 MySQL Listen 各個不同的 IP Address
#bind-address = 127.0.0.1
#
# server id 請記得每台機器都設定不同喔
#
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
[Read More][Ubuntu & java] java JDBC and MySQL
Posted on November 15, 2008
| 2 minutes
| 248 words
| appleboy
最近開始要摸 java 了,目前大概先實做 java with JDBC 連接 MySQL,所以在 JavaWorld@TW 這裡找了一些相關的文件,目前我在 Linux 底下實做,還沒找到一套很適合的 IDE Tool 來撰寫程式碼,大家好像都很推 netbeans 跟 eclipse,不過我目前還是使用 PSPad 來撰寫 java 程式碼,然後透過 FTP 的方式編輯,這不是重點,重點是要透過 jdbc 來連接 MySQL,目前是在 Ubuntu 7.04 這一版本上面實做,底下是實做方法: 1. 首先先安裝 deb 檔案:透過 apt-get 的方式
#
# 首先尋找 java lib with mysql
apt-get install libmysql-java
2. 安裝好之後尋找 jar 檔案,加入到 class path 裡面
#
# 首先 echo $CLASSPAT
#
# java mysql jar 檔案如下
/usr/share/java/mysql.jar
# 加入 CLASSPATH,修改 /etc/bash.bashrc
export CLASSPATH=$CLASSPATH:/usr/share/java/mysql.jar
# 然後在
source /etc/bash.bashrc
[Read More][轉載]MySQL 的 “SET NAMES xxx” 字元編碼問題分析
Posted on August 25, 2008
| 1 minutes
| 161 words
| appleboy
轉載自: PHPChina 近來接受 BBT 的培訓,做一個投票系統。系統程式碼倒不是很難,但是我的時間主要花費在了研究字符集和編碼上面。MySQL 和 Apache 兩個系統的編碼(字符集)問題讓我費勁腦筋,吃盡苦頭。網上對這些問題的解決比較零散,比較片面,大部分是提供解決方法,卻不說為什麼。於是我將這幾天收穫總結一下,避免後來者再走彎路。這篇文章對 PHP 編寫有一點幫助(看完你就知道,怎樣讓你的 PHP 程式在大部分空間提供商的伺服器裡顯示正常),但是更多幫助在於網路伺服器的架設和設置。 先說 MySQL 的字符集問題。Windows 下可透過修改 my.ini 內的
# CLIENT SECTION
[mysql]
default-character-set=utf8
# SERVER SECTION
[mysqld]
default-character-set=utf8
[Read More][轉貼] RoR:Ruby on Rails的部署方案選擇
Posted on July 10, 2008
| 1 minutes
| 86 words
| appleboy
我沒在玩 Ruby on Rails,但是底下這一篇我覺得寫的不錯,可以參考看看,裡面有介紹一下目前當紅 web daemon 的一些基本知識
RoR的部署方式從架構上來說分為前端和後端: 一、前端 前端的作用就是處理靜態資源,將動態請求分發到後端,有時候也帶有一些額外的功能,例如對特定URL進行rewrite和redirect,對HTTP輸出進行gzip壓縮等等。 前端目前已知的可以選擇apache, lighttpd, litespeed, nginx, haproxy 1、apache2.2 apache是全球市場佔有率最高的web server,超過全球互聯網網站50%的網站都用apache。apache2.2 + mod_proxy_balancer是一個非常流行,非常穩定的方案。 使用apache2.2唯一的問題就是apache的性能和後面那些輕量級web server相比,差太遠了。一方面在處理靜態請求方面apache要比lighttpd慢3-5倍,內存消耗和CPU消耗也高出一個數量級,另一方面 mod_proxy_balancer的分發性能也不高,比haproxy差很遠。 2、lighttpd lighttpd 是一個輕量級高性能web server,一個在MySQL Inc工作的德國人寫的。性能很好,內存和CPU資源消耗很低,支持絕大多數apache的功能,是apache的絕好替代者。目前lighttpd已經上升到全球互聯網第四大web server,市場佔有率僅此於apache,IIS和Sun。 lighttpd唯一的問題是proxy功能不完善,因此不適合搭配mongrel來使用。lighttpd下一個版本1.5.0的proxy模塊重寫過了,將會解決這個問題。 3、litespeed 和 lighttpd差不多,商業產品,收費的。比lighttpd來說,多一個web管理界面,不用寫配置文件了。litespeed專門為單機運行的 RoR開發了一個lsapi協議,號稱性能最好,比httpd和fcgi都要好。他的proxy功能比lighttpd完善。 litespeed 的缺點我卻認為恰恰是這個lsapi。因為lsapi不是web server啟動的時候啟動固定數目的ruby進程,而是根據請求繁忙程度,動態創建和銷毀ruby進程,貌似節省資源,實則和apache2.2進程模型一樣,留下很大的黑客攻擊漏洞。只要黑客瞬時發起大量動態請求,就會讓服務器忙於創建ruby進程而導致CPU資源耗盡,失去響應。 當然,litespeed也支持httpd和fcgi,這個和lighttpd用法一樣的,到沒有這種問題。 4、nginx 一個俄國人開發的輕量級高性能web server,特點是做proxy性能很好,因此被推薦取代apache2.2的mod_proxy_balancer,來和mongrel cluster搭配。其他方面和lighttpd到差不多。 要說缺點,可能就是發展的時間比較短,至今沒有正式版本,還是beta版。沒有經過足夠網站的驗證。 5、haproxy 就是一個純粹的高性能proxy,不處理靜態資源的,所有請求統統分發到後端。 二、後端 後端就是跑ruby進程,處理RoR動態請求了。運行後端ruby進程有兩種方式: 1、fcgi方式 準確的說,不能叫做fcgi方式,其實就是啟動一個ruby進程,讓這個ruby進程監聽一個tcp/unix socket,以fcgi協議和前端通訊。所以fcgi不是指ruby進程的運行方式,而是ruby進程使用的通訊協議。這就好比你tomcat可以用 http也可以使用ajp通訊一樣,tomcat自己的運行方式都一樣的,只是通訊方式不一樣。 fcgi方式啟動ruby進程,可以使用lighttpd帶的一個spawn-fcgi工具來啟動(JavaEye目前採用這種方式)。 值得一提的是,apache2.2的mod_fastcgi的方式和上面還不太一樣,由apache動態創建fcgi進程和管理fcgi進程,這種方式和 litespeed的lsapi面臨的問題是一樣的,此外apache的mod_fastcgi自己也有很多嚴重的bug,是一種很糟糕的部署方式。這種糟糕的部署方式也敗壞了fcgi的名聲。 fastcgi只是一種協議,雖然古老,但並不是不好用,http協議也很古老。沒有必要因為 apache的mod_fastcgi的運行方式的問題而連帶把fastcgi都一同否定了。fastcgi只是一個協議(程序之間的語言),是 apache的mod_fastcgi這個模塊有問題。打個比方,有個人英語水平很差,和你用英語對話,總是結結巴巴的,那你說是英語(fastcgi) 這種語言有問題呢?還是和你對話的這個人 (mod_fastcgi)有問題呢? 2、http方式 也就是用mongrel去跑ruby進程,由於mongrel實際上已經是一個簡單的http server,所以也可以單獨作為web server使用。mongrel現在越來越受歡迎了。 用fcgi方式還是http方式,我個人覺得區別不大,關鍵還是看應用的場合,一般而言,推薦的搭配是: lighttpd + fcgi 或者 nginx +mongrel,而apache因為性能差距,而不被推薦。 JavaEye為什麼用lighttpd + fcgi呢?原因如下: 1) lighttpd發展了好幾年了,市場佔有率也相當高,是一個經過實踐檢驗的server,它的文檔也很全;而nginx還沒有經過足夠的市場檢驗,文檔也很缺乏 2) JavaEye的ruby進程和web server在一台機器上面跑,通過unix socket使用fcgi協議通訊可以避免tcp的網絡開銷,其通訊速度比使用tcp socket使用http協議通訊要快一些。 什麼場合使用haproxy? 大規模部署,例如你的RoR應用到十幾台服務器上面去,你用haproxy會更好,可以方便的添加刪除應用服務器節點,proxy性能更好。 資料來源: Csdn – http://news.
[Read More]