ฐานข้อมูล Firebird
- Firebird ในฐานะที่เป็นฐานข้อมูล RDBMS จำพวกเดียวกันกับ MySQL, Postgresql ฟรีและเปิดโค๊ดเช่นเดียวกัน ที่สำคัญคือทุกตัวนั้น cross-platform แต่ถ้าดูจำนวนผู้ใช้แล้ว MySQL กินขาดเอาแค่ใช้กับ Web Application ก็ยังไม่มีฐานข้อมูลไหนมาเทียบเคียงได้ จำนวนผู้ใช้ Firebird เป็นรอง Postgresql อยู่พอสมควร
- ในฐานะความเรียบง่ายและเร็วแล้วผมคิดว่า Firebird น่าจะเป็น choice แรก ดูการทดสอบเปรียบเทียบระหว่าง Firebird,MySQL,Postgresql แต่การเปรียบเทียบพรรค์นี้นะดูเอาเป็น reference ก็แล้วกัน (คล้ายๆกับถามว่ารถ Toyota, Honda ใครเจ๋งกว่ากัน ถกกันไม่จบ) ดูการเปรียบเทียบที่ postgresql กินขาดได้ที่นี่
- post ใน blog ตอนนี้ถือว่าเป็นบันทึกช่วยจำของผมก็แล้วกัน ผมมีเกร็ดขำๆเล็กน้อยก็คือชื่อ Firefox ตัว Web browser ที่เราคุ้นเคยกันอยู่ตอนแรกปี 2003 Mozilla Foundation ได้เปลี่ยนชื่อจาก Phoenix มาเป็น Firebird ปรากฏว่ามาชนกับชื่อฐานข้อมูล Firebird ที่มีอยู่ก่อนแล้ว ซึ่งจะทำให้ประชาชนสับสนกันใหญ่ถ้าต้องค้นหาใน Search Engine กว่าจะเปลี่ยนมาใช้ชื่อใหม่คือ Firefox ก็หนึ่งปีให้หลัง
การติดตั้งบน Ubuntu Server
- ตอนติดตั้ง Ubuntu Server จะไม่มีลิสต์ให้เลือกเหมือนกับ MySQL (มากับ LAMP) ต้องมาติดตั้งภายหลังซึ่งไม่ได้ยากเย็นอะไรเพราะฐานข้อมูล Firebird มีอยู่ใน repository อยู่แล้ว ก่อนอื่น update ตัว cache repository เสียก่อน
$sudo apt-get update
- ขณะนี้ Firebird เป็นรุ่น 2.5 ติดตั้งด้วยคำสั่งดังต่อไปนี้ ซึ่งถ้า internet เร็วก็แป๊บเดียวประมาณ 5 MB
$sudo apt-get install firebird2.5-super
การ Config
- ในขณะติดตั้ง Firebird จะสร้าง user ชื่อ firebird และ group ชื่อ firebird ให้อัตโนมัติตรวจสอบได้ด้วยคำสั่งดังนี้
$cat /etc/passwd
- จะเห็นบรรทัดที่แสดงชื่อ user “firebird” ดังนี้
firebird:x:113:123:Firebird Database Administator,,,:/var/lib/firebird:/bin/bash
- ดู directory ชื่อ /var/lib/firebird เอาไว้ให้ดีๆ เป็น home ของ firebird ที่เป็น default ไดเรคทอรี ในอนาคตเราจะนำไฟล์ฐานข้อมูลมาไว้ที่นี่ จากนั้นพิมพ์คำสั่งเพื่อ config ตัว Firebird server ดังนี้
$sudo dpkg-reconfigure firebird2.5-super
- ขั้นตอนการ config จะถามว่าต้องการรัน Firebird Server ในขณะเริ่มต้น Linux หรือไม่เลือกตอบ <Yes>
- ขั้นตอนต่อไปป้อน password ปกติแล้วชื่อ root ผู้ดูแล Firebird Server คือ SYSDBA เมื่อป้อน password แล้วให้จดไว้ในที่ปลอดภัย ไม่ควรใช้ masterkey เพราะเป็นค่า default ทำให้คนเข้ามาเจาะได้ง่าย พ้นขั้นตอนนี้ก็เป็นอันเรียบร้อย
การตั้ง password สำหรับ user ชื่อ firebird
- ก็อย่างที่ผมบอกไปแล้วว่าตอนติดตั้งจะสร้าง user & group ชื่อ “firebird” มาให้อัตโนมัติ ผมจะป้อน password ของ firebird สมมติว่า “143firebird” ใช้คำสั่งต่อไปนี้
$sudo passwd firebird
Enter new UNIX password: #ป้อนคำว่า 143firebird
Retype new UNIX password: #ป้อน 143firebird อีกครั้ง
passwd: password updated successfully
- password ของ user & group ชื่อ “firebird” นั้นสำคัญไฉน ในกรณีแชร์ไฟล์ผ่านทาง Samba file server เวลา Remote จากเครื่อง client เข้าไปหา server ของ firebird (client อาจจะเป็นวินโดส์) เพื่อทำการ copy ลบไฟล์ข้อมูลจากไดเรคทอรี home ของ firebird ถ้าเป็นรุ่น 2.5 ชื่อไดเรคทอรีเต็มๆคือ /var/lib/firebird/2.5/data การ remote เข้าจะถูกถาม user และ password ถ้าเป็นตัวอย่างของผม user ก็ป้อน firebird ส่วน password ป้อน 143firebird เข้าไปก็จะ remote เข้าไปได้ (เกือบลืมไปถ้าแชร์ด้วย samba จะต้องเพิ่ม user ให้ตรงกับของระบบคือ user ชื่อ firebird ด้วยคำสั่ง #sudo smbpassswd -a firebird ป้อน password ให้ตรงกันด้วยคือ 143firebird)
การ copy ฐานข้อมูล Firebird ไปไว้ที่ Home
- หลังจากติดตั้ง Ubuntu server แล้ว จะเป็น command line ล้วนๆ สมมติว่าเรามีฐานข้อมูล Firebird อยู่แล้วต้องการ copy ไปไว้ที่ /var/lib/firebird/2.5/data ผ่านคำสั่ง sudo cp ตัวอย่างเคสเราเอาข้อมูลใส่ใน thumb drive เสียบเข้าเครื่อง server จะไม่มีการ mount ให้อัตโนมัติเหมือน Ubuntu Desktop จะต้องเมาท์ด้วยมือ สมมติว่าเมาท์แล้วทำการ copy ข้อมูลดังต่อไปนี้
$sudo cp employeedb.fdb /var/lib/firebird/2.5/data
การเปลี่ยนสิทธิ์ของไฟล์ฐานข้อมูล
- เมื่อ copy ไปแล้วด้วยสิทธิ์ของ root สิทธิของไฟล์ก็จะเป็นของ root ไปด้วยต้องทำการเปลี่ยนสิทธิ์มาเป็น user & group ชื่อ “firebird” ไมงั้นโปรแกรมจำพวก Administrative Tools เช่น FlameRobin, EMS SQL Manager for Firebird หรือ Firebird Maestro จะไม่สามารถใช้ฐานข้อมูลได้ การเปลี่ยนสิทธิ์ใช้คำสั่งบรรทัดด้านล่างต่อไปนี้
$sudo chown firebird.firebird /var/lib/firebird/2.5/data/employeedb.fdb
Firebird Administrative Tools
- ฝั่ง Linux ไม่ค่อยจะมี Administrative Tools หลากหลายเช่นเดียวกับฝั่งวินโดส์ เพราะทูลส์ที่ว่าเป็นด้านการค้าเช่น EMS SQL Manager for Firebird หรือ Firebird Maestro ที่เป็นทูลส์ มีอายุการใช้งานเต็มเวอร์ชั่นอยู่ 1 เดือนหลังจากนั้นจะเป็น free version ปิดฟีเจอร์หลายอย่างหลังจากผ่านไปแล้ว 30 วัน แต่ผมค่อนข้างชอบใจมากทั้งคู่
- FlameRobin เป็น Administrative Tools เหมือนกันแต่ฟีเจอร์น้อยกว่ามาก cross-platform ได้ ไม่มีฟีเจอร์สำหรับแก้ไขข้อมูลได้ การติดตั้งใน Ubuntu ทำได้ด้วยคำสั่ง
$apt-get install flamerobin
การ Connect ฐานข้อมูล Firebird Server ด้วย Lazarus
- ก็ขอเขียนสักหน่อย ความจริงไม่ได้ตั้งใจว่าจะเกี่ยวกับโปรแกรมมิ่งสักเท่าไหร่ ก็จากที่ผมเขียนมาด้านบนว่าถ้าฐานข้อมูลเราเก็บไว้ที่ /var/lib/firebird/2.5/data เราจะใส่ connection string อย่างไรเพื่อให้โปรแกรมที่เขียนไว้บนเครื่อง client ไม่ว่าจะพัฒนา Lazarus ด้วยวินโดส์หรือลินุกซ์ สามารถ connect เข้า Firebird Server ได้
- สมมติว่า Server อยู่บนวงแลนเดียวกัน Server มี IP Address : 192.168.1.200 ส่วนเครื่อง client ที่รัน Lazarus มี IP Address 192.168.1.20
[sourcecode language=”delphi”]
procedure TfrmMain.TestConnectDatabase;
var
FDBConnected : TIBConnection;
FTrans : TSQLTransaction;
begin
FDBConnected := TIBConnection.Create(NIL);
FTrans := TSQLTransaction.Create(NIL);
FDBConnected.Transaction := FTrans;
FTrans.Database := FDBConnected;
FDBConnected.Database := ‘var/lib/firebird/2.5/data/employeedb.fdb’; //ถ้าไม่ได้ aliases ต้องใส่ path เต็ม
FDBConnected.HostName := ‘192.168.1.200’; //Firebird Server อยุ่บน Ubuntu Server บน IP นี้
FDBConnected.UserName := ‘SYSDBA’; //default username
FDBConnected.Password := ‘masterkey’; //default password
FDBConnected.Active := true;
end;[/sourcecode]
- แต่ถ้าฐานข้อมูลไม่ได้อยู่บน Server คืออยู่บนเครื่องเราเองเปลี่ยน Host ดังนี้
FDBConnected.HostName := ‘localhost’;
การ Aliases
- Alias ถ้าแปลก็คือชื่อ ฉายา หรือนามแฝง เวลาอ้างอิงชื่อ Database ไม่ต้องใส่ path ยาวๆ การ config ทำได้โดยการไปแก้ไขไฟล์ aliases.conf ด้วยคำสั่ง
$sudo nano /etc/firebird/2.5/aliases.conf
- เพิ่มบรรทัดเข้าไป (สมมติว่าผมมีฐานข้อมูลชื่อ employeedb.fdb)
employee = /var/lib/firebird/2.5/data/employeedb.fdb
- ทำการ Restart Firebird ใหม่ด้วยคำสั่ง
$sudo /etc/init.d/firebird2.5-super restart
- เมื่อ alias แล้วการเขียนโปรแกรมด้านบนเปลี่ยน Database ดังนี้ (ไม่ต้องสนใจว่าเก็บที่ไหนใน Server ขอแค่อ้างชื่อได้ถูก)
FDBConnected.Database := ’employee’;
สรุป
- สำหรับผมแล้วรัก Firebird เพราะว่าใช้มานานแล้วตั้งแต่ Delphi ไม่ค่อยมีปัญหาฐานข้อมูลสามารถเขียน Trigger, Store procedure รวมทั้ง UDF ได้ ใช้เป็นไฟล์เดี่ยวสามารถสร้าง Table อยู่ภายในได้ตั้งชื่อได้ตามใจชอบ มีความเสถียร จำนวน User สัก 1000-2000 คนผมคิดว่าสบายๆครับ แต่อย่างไรก็ตามขึ้นอยู่กับประสิทธิภาพของเครื่อง Server ด้วย CPU เร็วๆหน่อย แรมมากๆหน่อย คือ Firebird รันเป็น Service เมื่อมี user ทำการ access เข้ามาจะแตกเป็น Thread เพื่อรองรับผู้ใช้ ดังนั้นจะใช้ CPU และแรมมากขึ้น ถ้ามี user เพิ่มขึ้น