ข้อดีและข้อเสียของ MySQL store procedure

ข้อดี

– เพิ่ม performance ให้กับแอพพลิเคชั่น เมื่อถูกสร้างขึ้น จะถูกคอมไพล์และเก็บไว้ใน database แต่ mysql นั้นเขียน stored procedure ในรูปแบบที่แตกต่างไปเล็กน้อย คือ มันจะถูก compile on demand เท่านั้น และหลังจาก compile เสร็จจะเก็บไว้ใน cache ซึ่งจะเก็บไว้ใช้ใน 1 connection ซึ่งหมายความว่ามันจะมีประโยชน์ และเพิ่ม speed ได้ถ้ามีการเรียกใช้หลายๆ ครั้งใน 1 connection หากไม่แล้วก็จะทำงานเหมือนกับ query ธรรมดา(ควรพิจารณาดูว่าจะเขียนหรือไม่โดยใช้หลักการข้อนี้)
– ช่วย ลด traffic ระหว่าง application และ database server (โดยเฉพาะอย่างยิ่ง กรณีที่ อยู่คนละเครื่องแล้วต้องมีการส่ง query เส้นยาวๆ หลายๆ ครั้ง ซึ่งต่างกับ stored procedure ซึ่งจะมีการส่งแค่ ชื่อฟังก์ชั่น และ parameter เท่านั้น)
– ช่วยในการใช้ซ้ำและ ซ่อนเร้นการทำงาน ในกรณีที่นำไปใช้กับ application อื่น เนื่องจากแสดงเป็น รูปแบบ interface ของ database เท่านั้น ซึ่งเป็นการลดงานของ developer
– ความปลอดภัยของ store procedure จำกัดโดย db admin ซึ่งสามารถกำหนด permission ต่างๆ ในการเรียกใช้ stored procedure ได้

ข้อเสีย
-ถ้าใช้ stored procedure เป็นจำนวนมาก มันก็จะกินทรัพยากรมากตามไปด้วย นอกจากนี้ ถ้ามีการเรียกใช้ logical operation จำนวนมากๆ ใน store procedure(ข้อนี้ต้องระวังให้ดี) การใช้งาน CPU ก็จะเพิ่มขึ้นอีก เนื่องจาก database server นั้นไม่ได้ถูกออกแบบมาให้ทำงานกับ logical operation
-โครงสร้างของ store procedure นั้นยากต่อการพัฒนา ในกรณีที่การทำงานในรูปแบบซับซ้อน มากๆ
-MySQL ไม่มีเครื่องมือสำหรับ debug store procedure
-ยากที่จะพัฒนาและดูแล stored procedure ซึ่งจะต้องใช้ skill ที่สูงพอสมควร และนักพัฒนาส่วนใหญ่ไม่ค่อยใส่ใจเรื่องนี้ ซึ่งจะนำไปสู่ปัญหาทั้งด้านการพัฒนาและดูแลระบบ ( ถ้าไม่ well document จริงๆ ผมก็ไม่แนะนำให้ใช้นะครับ )

แปลบางส่วนจาก

http://www.mysqltutorial.org/introduction-to-sql-stored-procedures.aspx

PHP การแปลงวันที่ใน DatePicker ของ jQueryUI ให้อยู่ในรูปแบบวันที่ของ MySQL

ผมคิดว่าคนที่เคยใช้ DatePicker ของ jQueryUI  ร่วมกับ MySQL คงจะเคยเจอปัญหานี้นะครับ

เพราะว่า วันที่ ที่ได้ ของ DatePicker จะอยู่ในรูปแบบ   dd/mm/yyyy  ครับ ซึ่งถ้าเราเอาไปใช้ดึงข้อมูลจาก MySQL โดยตรงจะทำให้ข้อมูลออกมาผิดเพี้ยน เพราะว่าวันที่ใน MySQL จะใช้รูปแบบ yyyy/mm/dd

 

โค๊ดสำหรับแปลง ครับ

$selectDate = date( "Y-m-d", strtotime($inputDate) );

 

การติดตั้ง sparks สำหรับ codeigniter บน ubuntu

sparks เป็น package manager สำหรับ codeigniter ตัวนี้ผมจำเป็นต้องลงเพราะต้องการใช้งาน rest-client สำหรับ เรียกใช้งาน API ต่างๆ เช่น twitter หรือ facebook  โดยตัวมันเองมีการเรียกใช้ sparks  (แต่ไม่บอกในวิธีการติดตั้ง) มาดูวิธีการติดตั้งดีกว่า ครับ

  1. เปิด terminal ขึ้นมา ย้ายตำแหน่งไปยัง root ของ codeigniter (ตำแหน่งที่มีไฟล์ index.php และ แฟ้มต่างๆ เช่น config view model เป็นต้น)
  2. ทดสอบว่ามี php อยู่ใน path ที่เราจะใช้งานไหม (โดยปกติจะมี ถ้าไม่มีให้ติดตั้ง)
    which  php
    โดยปกติต้องตอบว่า /usr/bin/php
  3. ทดสอบว่ามีการติดตั้ง curl แล้วหรือยัง
    which curl
    ของผมไม่มี ติดตั้งเพิ่มเติม sudo apt-get install curl ซึ่งควรจะอยู่ที่  /usr/bin/curl
  4. พิมพ์คำสั่งต่อไปนี้เพื่อทำการติดตั้ง
    php -r “$(curl -fsSL http://getsparks.org/go-sparks)” แล้ว enterสำหรับคนที่เจอข้อความแบบนี้(ผมก็เจอเช่นกัน) ก็คือว่าเราไม่ได้ทำการย้ายตำแหน่งไปตามข้อ 1 ครับ
    Can’t find application/core. Currently this script only works with the default instance of Reactor. You may need to try a manual installation..

    ถ้าใครใช้วิธีนี้ติดตั้งไม่ได้ไปดูวิธีติดตั้งแบบอื่นๆ ตามลิงค์นี้ครับ
    http://getsparks.org/install

  5. ติดตั้ง spark
    php tools/spark install -v1.0.0 example-spark
  6. ทดสอบว่า spark ติดตั้งสมบูรณ์ เพิ่มสองบรรทัดต่อไปนี้ลงใน โปรแกรมของเรา
    $this->load->spark('example-spark/1.0.0');      
    $this->example_spark->printHello();

การสร้าง authorized_keys สำหรับ ssh (บน ubuntu)

การสร้าง authorized_keys บน ssh จะทำให้เวลาเรา ssh ไปยังเครื่องเป้าหมาย ไม่จำเป็นต้องใส่ password กรณีนี้จะเป็นประโยชน์เวลาเราสั่งรัน script ที่เครื่องลูกหลายๆ เครื่องพร้อมกัน (โดยเฉพาะอย่างยิ่งการทำงานบน cluster)

วิธีการคือ

เครื่องแม่ให้ใช้คำสั่งต่อไปนี้

ssh-keygen -t rsa

จะมี prompt ถามหลายๆ ครั้งให้เรา enter ลงมาเรื่อยๆ จนสุด เราจะได้ไฟล์ชื่อ id_rsa.pub ซึ่งตรงนี้ให้เรา copy เป็นไฟล์ชื่อ authorized_keys

cat  idrsa.pub   >> authorized_keys

จากนั้นก็อปปี้ไฟล์นี้ไปยังเครื่องลูก เราจะสามารถ remote จากเครื่องแม่ไปยังเครื่องลูกได้โดยไม่ต้องใส่ password ครับ