Friday, July 18, 2014

การเปรียบเทียบระหว่าง VB.net และ C#

การเปรียบเทียบระหว่าง VB.net และ C# (vbnet and csharp comparison)

                 การเปรียบเทียบระหว่าง VB.net และ C# ไปอ่านกันได้ตามนี้ครับ น่าจะเป็นประโยชน์ กับเพื่อนๆ  ประกอบไปด้วย



ไปอ่านกันได้ตามนี้  ----> http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

Wednesday, April 2, 2014

แก้ปัญหา ตาราง _log ทั้งหลายที่มีขนาดใหญ่

เพื่อนๆ คงจะเคยประสบปัญหา กับตาราง _log ทั้งหลาย ..
สำหรับ HOSxP แล้ว จะมีตารางประเภทนี้จำนวนมาก ซึ่งจะเกิดปัญหาเรื่องการสำรองข้อมูลรวมไปถึงหากปล่อยไว้จะทำให้เกิดปัญหาในเรื่อง Performance ของระบบได้เลยทีเดียว ...หากต้องการแก้ปัญหานี้ไปดูกันเลยครับ

ตารางต่างๆ ที่เป็น log ดูได้จากคำสั่ง

show table status  like '%log%'



ตัวอย่างการแก้ปัญหา ตาราง ksklog มีขนาดใหญ่

รูปแบบ แรก   คือการเก็บสำรองไว้ที่ tmp database  (แบบนี้ขนาดพื้นที่ H/D ไม่ได้ลดลง เพียงแต่ข้อมูลใน Table ใน  DB หลักจะ มีขนาดเล็กลง ) มีขั้นตอนทำดังนี้

1. สร้างฐานข้อมูลเปล่าๆ ไว้ เช่น hos_backup  ด้วยคำสั่ง

create database hos_backup

2. หากต้องการลบข้อมูลออกจากตารางไหน ให้ใช้คำสั่งนี้ครับ (ตัวอย่างตาราง ksklog) (DB หลักชื่อ hos )

create table hos_backup.ksklog select * from hos.ksklog limit 0;

จากนั้น
alter ignore table hos_backup.ksklog add primary key (ksklog_id);

จากนั้น
insert ignore into hos_backup.ksklog select * from hos.ksklog;

จากนั้น หากต้องการลบทั้งหมดให้ใช้คำสั่ง
delete from hos.ksklog;

หากไม่ต้องการลบทั้งหมดให้ใช้คำสั่ง  (จากคำสั่งลบทีละ 100000 record )
delete from hos.ksklog  where  ksklog_id  < 100000

หลังจากทำการลบข้อมูลแล้ว ให้ทำการ optimize table ด้วยคำสั่ง   อ่านบทความได้ที่นี่  ---> อ่านบทความ optimize table คลิก

optimize table hos.ksklog

แบบที่ 2 คือการ TRUNCATE    จะล้างข้อมูลพร้อมทั้ง reset auto increment ให้เริ่มนับใหม่ด้วย แต่ delete แค่ลบข้อมูล ไม่ reset auto increment ให้ครับ  TRUNCATE  จะทำการลบข้อมูลทั้งตาราง เมื่อรันคำสั่งนี้จะไม่สามารถ ROLLBACK ได้ ซึ่ง TRUNCATE จะเร็วกว่าการใช้คำสั่ง DELETE เพราะไม่จำเป็นต้องมีการไปเก็บข้อมูลไว้ใน undo เพื่อไว้สำหรับการ ROLLBACK

การใช้งานโดยใช้คำสั่ง truncate table hos.ksklog ;

...การทดสอบต่างๆมีความเสียง ควรทำด้วยความระมัดระวัง และให้ทดสอบกับข้อมููลทดสอบก่อน เห็นผลจริงค่อยทำกับระบบจริง การจะทำหรือไม่ทำขึ้นอยู่กับบริบทแต่ละที่ครับ หากระบบทำงานได้ดีไม่มีปัญหา ก็ไม่มีความจำเป็นที่จะต้องทำ ... 


การ optimize table กับการแก้ปัญหา overhead ของตารางเก็บข้อมูล

ทุกท่านทราบหรือไม่ว่า overhead ในฐานข้อมูลคืออะไร  

overhead จะเกิดขึ้นในเวลาที่เราลบ record ของข้อมูลครับ ครับ เพราะ DBMS มันไม่ลบข้อมูลออกจริง ๆ แค่ไปมาร์คที่ record ว่าได้ลบ record นี้แล้ว ทั้งนี้ก็เพื่อลด  I/O ที่จะเกิดขึ้น และเวลามี insert มันก็มา reuse พื้นที่ตรงนี้ล่ะครับ ถ้าหากมีการปรับปรุง migrate ระบบแบบหนัก ๆ ครั้งนึง ก็สมควรที่จะ OPTIMIZE ครับ

ยกตัวอย่าง     : คัดลอกบางส่วนมาจาก  http://www.narisa.com/forums/index.php?showtopic=22474

มี text file อยู่ไฟล์นึง มีข้อกำหนดว่า แต่ละบรรทัดมีจำนวนไบต์เท่ากัน คือ 40 ไบต์ ถ้าไม่ใช้ก็ใส่ช่องว่างเข้าไป (เพื่อจะได้ seek ง่าย ๆ)
001 | this is a DBMS record002 | this is another DBMS record003 | this one will be deleted soon004 | this one won't be deleted
005 | another record
เราจะลบ record 003 เราจะทำอย่างไรครับ

001 | this is a DBMS record002 | this is another DBMS record004 | this one won't be deleted
005 | another record
- ลบบรรทัดนั้นทิ้งไป ย้ายบรรทัดล่าง ๆ ขึ้นมา
เหมือนจะง่าย แต่ถ้าเรามีสัก 1 ล้าน record แล้วเรากำลังลบ record ที่ 3 แปลว่าเราอ่านและเขียนข้อมูล 1,000,000-3 = 999,997 บรรทัด หรือ 39,999,880 ไบต์ รวม 79,999,760 ไบต์เพราะต้องอ่านและเขียน วิธีนี้ไม่สวยแน่ ๆ

001 | this is a DBMS record002 | this is another DBMS record
004 | this one won't be deleted
005 | another record
- เปลี่ยนเนื้อหาบรรทัด 3 เป็นช่องว่างให้หมด
เราต้องเขียนค่า 0 ลงในบรรทัด 3 ทั้งหมด 40 ไบต์ ดีขึ้นเยอะ

001 | this is a DBMS record002 | this is another DBMS record005 | another record004 | this one won't be deleted
- ย้ายบรรทัดสุดท้ายมาแทนบรรทัดที่ 3
เราต้องอ่านบรรทัดสุดท้าย 40 ไบต์ เขียนทับบรรทัด 3 อีก 40 ไบต์ และลบบรรทัดสุดท้ายทิ้งโดยการลดขนาดไฟล์อีก 4 ไบต์ รวม 83 ไบต์ และเสียความสามารถในการเรียงลำดับไป

และวิธีสุดท้าย
เปลี่ยน ID ของบรรทัด 3 ให้เป็นค่าที่เป็นไปไม่ได้ เพื่อเขียนคราวหลังจะได้มาทับตรงนี้
001 | this is a DBMS record002 | this is another DBMS record?03 | this one will be deleted soon004 | this one won't be deleted
005 | another record
ไบต์เดียวเอง :D

น่าจะพอทำความเข้าใจ เรื่อง  I/O กันแล้วนะครับ 

คราวนี้มาดูตัวอย่างกันบ้าง ผมยกตัวอย่างใน Database   HOSxP ให้ดู นะครับ
ให้ใช้คำสั่ง   show table status  





เราจะเห็น สถานะตารางข้อมูลดังภาพ จะบอกถึง ประเภท Table (MyISAM , InnoDB)  จำนวน Rows และขนาดของข้อมูล Data Length  คราวนี้สิ่งที่เราสนใจจะอยู่ที่  Field Data free ซึ่งก็คือ overhead ที่เรากำลังกล่าวถึงกัน  แสดงว่ายังมีการ จองพื้นที่ตรงนี้อยู่ทั้งที่มีการเปลี่ยนแปลงหรือลบไปแล้ว จึงทำให้เสียพื้นที่ Hard disk ไป  โดย ใน 1 ฐานข้อมูล ค่า overhead ในแต่ละ table มันอิสระ ต่อกัน เช่น ใน table a มีค่า overhead มาก ก็มีผลต่อ การ insert del เฉพาะ table นี้เท่านั้น table อื่นๆในฐานข้อมูลเดียวกันไม่เกี่ยวข้องด้วย ดังนั้นหากท่านพบข้อมูลดังกล่าวแล้ว มีวิธี แก้ปัญหาดังนี้ ....

การ OPTIMIZE ก็คือไปจัดการตรงนี้ให้มันลบจริง ๆ จะได้ประหยัดพื้นที่

จากตัวอย่าง ผมต้องการ OPTIMIZE  table  stock_item_unit_trx  ที่มี Data free ซึ่งก็คือ overhead นั่นเอง

 ให้ใช้คำสั่ง  OPTIMIZE TABLE stock_item_unit_trx ;

หมายเหตุ การ OPTIMIZE TABLE จะทำการ Lock Table นะครับ เพราะฉนั้น หากมีการ ใช้งาน ตารางข้อมูลก็จะถูก Lock ดั้งนั้นวางแผนให้ดีนะครับ





ตารางที่สามารถทำการ optimize ได้คือประเภท MyISAM, InnoDB, และ Archive

หลังจาก OPTIMIZE TABLE ลองทดสอบดูโดยใช้คำสั่ง    show table status 

จะได้ผลดังรูป  


สมมุติว่ามีข้อมูลอยู่ 5 ล้าน Record การ Optimize จะใช้เวลาเท่ากับ 5 ล้าน Record ดังนั้นระยะเวลาการทำ จะขึ้นอยู่กับข้อมูลด้วย หลังจากที่ทำการ Optimize จะเห็นว่าค่า  overhead ในฐานข้อมูลลดลง และทำให้ H/D มีพื้นที่เพิ่มขึ้นรวมทั้ง ทำให้ Performance ของระบบดีขึ้นด้วยครับ แต่สำหรับ รพ. ที่มีขนาดใหญ่ การกระทำดังที่กล่าวมาแล้วทั้งหมดก็วางแผนให้ดีด้วยครับ ...เพราะมีผลกระทบหน้างานด้วย..เพราะมีการใช้งานตลอดเวลา(การ OPTIMIZE TABLE จะทำการ Lock Table นะครับ เพราะฉนั้น หากมีการ ใช้งาน ตารางข้อมูลก็จะถูก Lock).... สำหรับตอนนี้ เอาไว้แค่นี้ก่อน บทความหน้าเรามาดูระบบการจัดการ ตาราง Log ทั้งหลาย ....(02-04-2557)


...การทดสอบต่างๆมีความเสียง ควรทำด้วยความระมัดระวัง และให้ทดสอบกับข้อมููลทดสอบก่อน เห็นผลจริงค่อยทำกับระบบจริง การจะทำหรือไม่ทำขึ้นอยู่กับบริบทแต่ละที่ครับ หากระบบทำงานได้ดีไม่มีปัญหา ก็ไม่มีความจำเป็นที่จะต้องทำ ... 

Friday, February 28, 2014

การออกแบบระบบ WiFi กับระบบ VLAN ให้เป็นแบบ Roaming

วันนี้เอาการออกแบบระบบ WIFI ที่ รพ. มาแนะนำ เผื่อเป็นทางเลือกให้กับพี่ๆน้องได้ใช้งานกันครับ ระบบนี้ ใช้ความสามารถของ VLAN และ Unfi Software Controller มาใช้ในการจัดการระบบ ....
ในปัจจุบันได้ติดตั้งไปทั้งหมด 16 ตัวแล้ว เหลือ ยังไม่ติดอีก 1 ชุด


หลักการออกแบบ คือใช้ VLAN  มาช่วยจัดการระบบ
โดยการแบบออกเป็น 4 VLAN
      1. VLAN 10  ---->  กลุ่ม Server
      2. VLAN 20  ---->  กลุ่ม OPD
      3. VLAN 30  ---->  กลุ่ม IPD
      4. VLAN 40  ---->  กลุ่ม Wifi

Layout ตามรูปครับ



ในการทำ VLAN ใช้ Switch ตัวนี้มาช่วยจัดการ


ระบบ Wifi จะวิ่งผ่าน Trunk port ของ Switch    สำหรับการแบ่ง VLAN แบบ Port ไม่ให้สามารถมองเห็นกัน ไปอ่านที่นี่




โดย VLAN ปรกติก็ไปอ่านจาก link ข้างบน  ขอข้ามไปก่อนนะครับ มาดูที่ WIFI กันก่อน
ในการทำใช้อุปกรณ์ เจ้า 2 ตัวนี้

1.UBiQUiTi UAP-LR  Indoor Wireless    UAP-LR DataSheet





2.UBiQUiTi PICOSTATION-M2HP (PICOM2HP) -  Indoor/Outdoor   .. Datasheet Picostation M2HP




สำหรับ UAP-LR สามารถใช้กับ Software UniFi ได้เลยแต่สำหรับ Picostation-M2HP จะต้อง Up Firmware เสียก่อน   ส่วนขั้นตอนทำไปดูได้ตามกระทู้นี่  ....วิธีทำ UbiQuiTi PICOM2HP ใช้งานร่วมกับ UniFi Software .... 

ขั้นตอนการติดตั้ง ไปศึกษาได้จากกระทู้นี้ครับ ติดตั้ง Software Unifi    -----> ขั้นตอนการติดตั้งอุปกรณ์ UbiQuiTi UAP - UniFi v2.0


หลังจาก นั้นเข้าสู่ การ Config เพื่อ  Build อุปกรณ์ทั้งหมด ให้ เข้ามาสู่  Unifi  จะได้ดังรูป



โดย Software สามารถ แสดง รัศมีสัญญาณ  (Coverage)ให้เราดูได้ 


ในการออกแบบ  ได้ออกแบบให้ แสดง SSID ออกมา 2 SSID   อุปกรณ์ กำหนดได้สูงสุด 4 SSID
ในที่นี้กำหนดไว้ คือ
         1. WH_@Office  ----> ใช้ Key   wpapsk   ระบบภายใน(IP:192.168.0.xx/22)
         2. WH_@FreeWiFi  ----> ใช้ Key   open   Authen ผ่าน Radius Server(IP:10.0.0.1/16)





ในการ Config    WH_@FreeWiFi   จะวิ่งบน VLAN 40  (เฉพาะระบบ freewifi )



มาดูว่า ระบบ สามารถทำอะไรได้บ้าง 

มีระบบแสดง สถิติ  เป็น Chart ให้ด้วย




มีระบบ Monitor อุปกรณ์ แต่ละตัว สามาถสั่ง Reboot หรือดูตำแหน่งอุปกรณ์ได้ พร้อมแสดง จำนวน Client ที่ Connect อยู่ 


สามารถดู ประเภท การ Connect   จำนวน Client ที่ Connect อยู่ 



แล้วอันนี้ ครับ มีระบบ roaming  หากมีการเคลื่องที่ ของอุปกรณ์ ที่เชื่อมต่อ จะมีการจับสัญญาณ จากจุดหนึ่งไปจุดหนึ่ง โดยอัตโนมัติ ซึ่งถือว่าเป็น Highlight ของระบบเลยที่เดียว (เหมือน cell side ระบบโทรศัพท์เคลื่อนที่)  จึงทำให้หากมีการติดตั้งที่ครอบคลุม ระบบจะไม่หลุดการเชื่อมต่อเลย...



สามารถ Block หรือ Reconnect อุปกรณ์ หรือเครื่องที่เชื่อมต่อใช้ งานอยู่ได้



แสดงข้อมูล Upload /Download  และ Activity ของอุปกรณ์ที่เชื่อมต่ออยู่ 




ครับ ก็น่าจะพอเห็นภาพ ของระบบนะครับ  สำหรับที่ รพ. ใช้งานมา ก็ประมาณ 1 ปีแล้ว ระบบก็ยังทำงานได้ดีครับ ... โดยมีการแยก ระบบภายใน กับ ระบบ Free wifi ออกจากกัน ดังนั้นจึงไม่เกิดปัญหาเรื่อง IP เต็ม ที่เพื่อนๆ หลายๆคนเจอปัญหากันอยู่ 

โดยระบบ Free WIFI  ให้บริการผ่าน ระบบ Authen จะมีการให้บริการดังนี้
              1.สำหรับคนไข้ ห้องพิเศษ คูปอง ให้ใช้งานได้ 3 วัน 
              2.สำหรับบุคคลทั่วไป สมัครใช้งานได้ฟรี วันละ 30 นาที 
              3.สำหรับเจ้าหน้าที่ สมัคร User เพื่อใช้งาน 

ส่วนระบบ ภายใน (Office) ก็ให้บริการเฉพาะเครื่องที่จำเป็นต้องเข้าใช้งานระบบ HIS ของ รพ.เท่านั้น ก็ถือว่าเป็นการแยกระบบไม่ให้ยุ่งเกี่ยวกัน ระหว่าง งาน กับ Net  ได้เป็นอย่างดี ....

 วันนี้ก็เอาแค่นี้ก่อน หากมีไรเพิ่มเติม จะมานำเสนอหรือ Update ให้เรื่อยๆครับ  .....(27-2-2557 )

ขอบคุณข้อมูล ดีๆจาก : http://www.sys2u.com/   ด้วยครับสำหรับ กระทู้ที่นำมาให้อ่านกัน ....

Tuesday, February 11, 2014

การติดตั้ง Tomcat 7 บน CentOS & RedHat 5/6

การติดตั้ง  Tomcat 7 บน CentOS & RedHat 5/6

ขั้นตอนที่ 1 ตรวจสอบ JAVA ว่ามีการติดตั้งไว้แล้วหรือไม่ โดยใช้คำสั่ง ที่ command Shell
                   หากมีการติดตั้งแล้วให้ขึ้นดังรูป
               

   ถ้าหากยังไม่ได้ติดตั้งให้ไปทำการติดตั้งโดยมีขั้นตอนตามนี้  JAVA Install  หากเป็นเว็ปภาษาไทย ไปดูได้ที่ การติดตั้ง JAVA SDK

ขั้นตอนที่ 2  ทำการ Download Tomcat 7 จากเว็ป Tomcat Download Site  โดยใช้คำสั่ง ที่ command Shell โดยการโหลดมาเก็บไว้ที่ /opt

# cd /opt 

ตามด้วย

# wget http://mirror.olnevhost.net/pub/apache/tomcat/tomcat-7/v7.0.50/bin/apache-tomcat-7.0.50-
fulldocs.tar.gz    



ขั้นตอนที่ 3  หลังจากโหลดไฟล์เสร็จ ซึ่งจะอยู่ที่ directory  /opt   จากนั้น แตกไฟล์ ออก 

# tar xzf apache-tomcat-7.0.42.tar.gz


จากนั้นเข้าไปติดตั้งโดยใช้คำสั่ง

# cd apache-tomcat-7.0.42# ./bin/startup.sh


หากติดตั้งสำเร็จ จะได้ หน้าจอดังรูป





ขั้นตอนที่4 การเข้าใช้งานผ่าน  Browser
จากนั้นลองทดสอบ เข้าผ่าน Browser  port 8080    ยกตัวอย่าง http://192.168.1.10:8080  หากการติดตั้งไม่มีปัญหาจะได้ดังรูป 





ขั้นตอนที่5 การแก้ไข Username และ Password  admin/manager โดยเข้าไปแก้ที่  conf/tomcat-users.xml

โดยการเพิ่ม ดังตัวอย่าง 
<role rolename="admin-gui" />
<user username="admin" password="PASSWORD" roles="manager-gui,admin-gui" />

เท่านี้ก็สามารถ ใช้งาน Tomcat ได้ล่ะครับ