วันเสาร์ที่ 2 พฤศจิกายน พ.ศ. 2562

Introduction Big Data ใน 3 นาที

Intro Big Data ใน 3 นาที

-----------------------------------------------------------------------------
Big Data = การจัดการ  "ข้อมูล" ในแบบใหม่ เพื่อให้เกิดประโยชน์

"ข้อมูล"  ที่มีลักษณะนี้
  • (ข้อมูล) มี "ขนาด" ใหญ่มาก
  • (ข้อมูล) มาจาก "หลากหลายชนิด" (ตาราง,รูป,vdo,...)
  • (ข้อมูล) เปลี่ยนแปลง "เร็ว" (ในช่วงเวลาสั้นๆ เกิด data ปริมาณมาก)
  • (ข้อมูล) มีความ ไม่น่าเชื่อถือ แทรกอยู่ 
    (เช่น มีการจ้างโหวต  ทำให้ คะแนนโหวต ไม่สะท้อน) 
       ตย. IBM เคยจัดลักษณะไว้ 4V 
-----------------------------------------------------------------------------
สิ่งต่อไปนี้ ไม่ใช่ (การจัดการ) Big Data เพราะ ลักษณะ "ไม่ครบ"
       (มองเป็น จัดการ Data ทั่วไป)
  • มีข้อมูล 10 ปี - อยู่ใน DB2, MS SQL Server, MySQL, ...
  • มีข้อมูล 2 เทราไบต์ - เก็บ VDO ,รูปภาพ
-----------------------------------------------------------------------------
ย้ำ - เพื่อให้เกิดประโยชน์ -ไม่ใช่ สนใจ "แค่มี" เท่านั้น 

ตย. การใช้งาน
  • "ใช้ข้อมูล  การขายในระบบ (MySQL) ร่วมกับ คำติ/ชม ใน WebBoard,Facebook, Pantip, Instragram"
  • เพิ่ม รูปแบบผลลัพธ์ -> ได้แนวทางใหม่
    นำคำชม/วิจารณ์ ใน Blog มาปรับ แผนการตลาด
  • นมำมาสร้าง   AI ด้าน ...
-----------------------------------------------------------------------------
มาลงลึก ทางเทคนิคกัน 

-Disk  เพิ่ม ขนาดได้ ,ทำงานได้เร็ว ,ราคาเหมาะสม
-software จัดการ Data
  • Structure Data  กลุ่ม RDBMS
    เช่น DB2, MS SQL Server, mySQL, ... เป็นต้น
    + วิธีจัดเก็บ Index เพื่อความเร็ว - Data warehouse, BI (Business Intelligence)
  • Un-Structure Data  กลุ่ม XML ,JSON (Web Board ต่างๆ, Image, VDO)
    เช่น Mongo, neo4gen, ...  เป็นต้น
    + วิธีจัดเก็บ Index เพื่อความเร็ว - Hadoop

-Server, OS  (มักมอง พร้อมกับ ด้านบน และ ทีมงาน)
  เช่น MS SQL Server ใช้ดีกว่า Windows, MySQL ใช้กับ Unique ได้  เป็นต้น

>> ภาพรวม  สิ่งที่ต้องทำ 
  • เครื่องมือ,อุปกรณ์
    • ใช้ Cloud  (รวมหลายเรื่อง)
  • วิธีการ
    • ใช้อุปกรณื IoT เพิ่ม  สร้าง Data อย่างละเอียด ปริมาณมาก 
  • คน
    • ผู้นำ ที่เห็นภาพรวม
    • พัฒนา ทีม วิเคราะห์ข้อมูล "จากรูปแบบใหม่" 
    • พัฒนา ทีม IT (Data Science + Data Engineer)


-----------------------------------------------------------------------------

นอกเรื่อง

(ส่วนตัว) เชื่อว่า  ปัญหา ใหญ่  ไม่ใช่ งบฯ
แต่เป็นที่ "คน" ไม่พร้อม  และ  วิธีการ "ไม่เหมาะ"
  • ไม่รู้  เลย (ไม่อยากรู้ , ไม่อยากเสียเวลา)
  • เคยได้ยิน แต่ ไม่สนใจ (ไม่ใช่ หน้าที่ , ถูกสั่งว่า ห้าม ทำ)
  • อยากเรียนรู้ แต่ มันยาก (เริ่มไม่ถูก  เนื้อหา "มาก" และ "เปลี่ยนเร็ว")
    ไม่รู้  วิธีเรียนรู้  ที่เหมาะ กับยุคนี้
คนรุ่น เก่า  :  เรียน s/w ที่มาตรฐาน (ไม่เปลี่ยนมา 5 ปีแล้ว) - ราคาแพง
คนรุ่น ใหม่ :  เรียน s/w ที่เพิ่งเปิดใช้ แล้ว ดัง + ฟรี - ทยอยสะสม ศัพท์ใหม่ๆ

คนรุ่น เก่า :  ต้องมี "คนสอน" (course อบรม ระดับ-1,2,3)
                    เรียนแล้วทำตามได้ แน่นอน - ต้อง "รอ" ให้เปิดสอน , "รอ" เรียนครบ(น่าจะเก่ง)
คนรุ่น ใหม่ :  ดู YouTube, อ่านจาก บทความ เอง
                     ทำตามอาจจะไม่สำเร็จ - เรียนที่ไหนก็ได้ "ทันที"


คน(ไทย) ส่วนใหญ่ ยังไม่คุ้นกับ  การเรียนรู้ด้วยตนเอง + การทำงานเป็น "ทีม"
     คนรุ่นเก่า มีส่วนใหญ่ สร้าง/ส่งเสริม   วัฒนธรรมนี้ไว้  โดยไม่รู้ตัว

ถ้าเข้าใจ  และ  ผสมผสานได้ จะได้ผลลัพธ์ ที่ดีครับ
เตรียมตั้งแต่  เด็ก, พนักงานใหม่, จัด คนรุ่นเก่า (มาสนับสนุน ,ไม่ให้ ขัดขวาง)





วันศุกร์ที่ 16 กุมภาพันธ์ พ.ศ. 2561

Intro to AS/400

Intro to AS/400


1 : แนะนำตัว AS/400

      ทำไม คนส่วนใหญ่ เรียก AS/400
      เพราะ มันเป็นรุ่นที่ "ขายได้จำนวนมาก"  (ทุกอย่างลงตัวพอดี  จำไว้ตอบ คนช่างสงสัย)
             มันรวมทุกอย่างไว้ที่ตัวมันเอง  (ทั้ง Hardware และ Software)
             - จบทุกอย่างด้วย "เจ้าเดียว"
             # ยุคนั้นจะทำอะไร ต้องแยกซื้อ (อยากได้  Tape ความเร็วสูงยี่ห้ออื่นมาใช้)
                  มันมักจะเกิดปัญหา  ต่อกันกับ ยี่ห้อที่เรา มีอยู่  "ไม่ได้"/"ยุ่งยาก"
                  ยุคนี้  โชคดี เกิดมาตฐาน USB Port
                  (แต่ยังวุ่นวาย ส่วนที่เหลือ เช่น หา Driver ที่ตรงกับ  รุ่นอุปกรณ์ ,รุ่นของ Window + Patch)

             - IBM สร้างทีมสนับสนุน และ การันตี ที่ "ดีเลิศ"
             # เคยเจอะปัญหานี้มั๊ย  ลง Excel 2016  แทน Excel XP   แล้วเครื่องช้ามากๆๆๆ
               สาเหตุ จากอะไร ? - เครื่อง PC รุ่นเก่าไป, RAM ไม่พอ, Win (ลงผิด,Patch ไม่ทันสมัย), ตัว Excel ลงผิด version, ใช้ Excel ผิดวิธี)
               จะถามใครดีล่ะ ?  คนนั้น(มักจะ)รู้เฉพาะงานของเขา  มักจะบอกส่วนของฉัน ปรกติ  ให้ไปถามคนอื่นต่อ ?
               เราอยากจะทำงานต่อแล้วล่ะ ?  ไปต่อไม่ถูกเลย
               สุดยอด  AS/400 IBM ทำเอง "ทั้งหมด"  จึงตอบได้ ว่าปัญหา เกิดจากอะไร ? แก้ไขอย่างไร ? (รวมทั้งเตือนว่า ต้องปรับ อะไร?  เพื่อไม่ให้เกิดปัญหา)

               แต่ทั้งหมด  ต้องแลก กับ "ราคา" และ "ค่าบริการ" ที่แพงเอาการ (IBM เรียกว่า เหมาะสม เพราะถ้าคุณทำงานต่อ  ไม่ได้,ช้า  มันมีมูลค่าสูงกว่า
         
      ทำไม หลายบริษัทฯ ยังไม่เปลี่ยน ?
      อารมณ์เดียวกับมีคนมบอกให้เปลี่ยน Win XP  (เป็น 2000,Vista, 7,8,10)
           แล้วเกือบทั้งโลก  ก็ไม่ยอมเปลี่ยน
      เพราะ มันใช้งานหลักได้ดี (เสียเงินเปลี่ยนทำไม)  การเปลี่ยน "ต้องหยุด/ชะงัก"  (ขณะเปลี่ยนต้องหยุด, ไม่นับรวมว่า  ขณะเปลี่ยนเกิดปัญหา - อันนี้หยุดใช้ "ยาว",  หลังเปลี่ยน ก็ต้อง "หัดใช้"=เสียเวลา) (เราไม่เคยหยุด)
                 การเปลี่ยน  "ต้องจ่ายซะด้วย" (นับว่าแพงมาก)
          หลายบริษัทฯ เลือกที่จะใช้งานต่อ   จนกว่า จะไม่มี  ข้ออ้างเหลือแล้ว

 Hist รุ่นที่ IBM ผลิตบางส่วน  (อาจจะเห็นคำพวกนี้)
      - S/38(1978) -> ... -> AS/400(1988) -> (เปลี่ยนชื่อ) -> System i (สุดท้าย นำไปใส่ในตู้)

2 : Sign On & Sign Off

      คอมพ์ ทุกชนิดจะต้องมี  OS (Operating System) เป็นชุดโปรแกรมแรก  ที่ทำงาน และเราก็ต้องคุยผ่านโปรแกรมตัวนี้    (ของ PC ก็คือ Windows หรือ Linux นั่นเอง)
      AS/400 เรียกเป็น OS/400

     เมื่อจะเริ่มเข้าใช้  ระบบฯ   เราจะต้อง  "มีหน้าจอ" ที่ติดต่อกับ OS/400 ได้ (ภาพ S/38 จะเห็นว่า มีจอภาพ)   ปัจจุบัน  เข้าใช้ผ่าน CA/400  (ติดตั้งบน PC แล้วตั้งค่าให้มันติดต่อไป OS/400)
     (ทั่วไป) เฉพาะ คนที่มีสิทธิ จึงจะเข้าใช้งานได้   โดย "ระบุตัวตน" ( ได้ทะเบียน โดย Admin หรือ เจ้าของเครื่อง แจ้งไว้)


อย่างน้อย ต้องระบุ User Name + Password
     ถ้าหน้าจอมีช่องให้ระบุ  อาจระบุเพิ่มเติม  ได้
 เช่น หลังจากผ่านหน้าจอ   แล้ว  เรียกใช้ Menu หรือ โปรแกรม อะไร (อยู่ใน Library อะไร)

      ทำไม ต้องระบุชื่อ Menu,โปรแกรม ล่ะ ?
      (แนวคิด IBM) จัดกลุ่ม โปรแกรม แยกเมนูไว้  เมื่อใช้งานจริง เกิดเมนู มากมาย จนเข้าใช้ตามลำดับ มัน "ช้า" มาก   (ใน SAP ก็เหมือนกัน)
        มันจะดีกับ User กลุ่มหนึ่ง ถ้า  เข้าใช้ตรงๆ ตั้งแต่ตอนเข้าที่ SignOn ได้เลย
       - แนวคิดเน้นทำงาน  "ได้เร็ว"  สำคัญกว่าเน้น "สวยงาม"

     สังเกต  หน้าจอ(ขอเรียกว่า จอเขียว) จะทำงานลักษณะ Text Mode (แสดงเป็น อักษรเท่านั้น)
     Command Line - พื้นที่ที่ใช้ป้อน  "คำสั่ง" หรือ  "ตัวเลือกเมนู"
     การจบการใช้งาน  ต้องป้อน  คำสั่ง   SignOff    (ถ้าเป็นเมนูข้างต้น  ป้อน 90)

     User Profile and Assistance Levels
     Assistance Level  ผมจะเรียกว่า  ระดับ "ตัวช่วย" ตามสิทธิการใช้คำสั่ง OS/400
     (ผมว่า ง่ายดี)  ในยุคแรกๆ  แบ่งไว้แค่ 3 กลุ่ม คือ User, Programmer, Admin
     ปัจจุบัน  การจัดกลุ่ม เริ่ม "ซับซ้อน" เช่น User บางคน อยากเรียกใช้ คำสั่ง บางส่วนเหมือน Programmer  (บางคนจะเรียกว่า Power,Advance)  กลุ่มงานมีแยกเป็น เกี่ยวกับ  เรื่อง File, Device, Spool, ... ทำให้การจัดกลุ่ม  "ซับซ้อน" สุดๆ (ใครทำ เรื่องนี้ได้ดี  นับว่าสุดยอดครับ)

3 : การใช้ Keyboard

     AS/400 ถูกออกแบบให้  ป้อนได้ "เร็ว"โดยมือขยับน้อยที่สุด และไม่ต้องใช้ Mouse (ยุคนั้นไม่มี Mouse) ภายใต้  "ข้อจำกัด"  จึงมีการสร้างวิธีเพื่อช่วย   การรู้/เข้าใจ จะช่วยให้ จะทำให้เราทำงานเร็วขึ้น   (ผมว่า ยุคนั้น พยายามได้สุดยอด และ ก็ยังมีประโยชน์  ถ้านำมาใช้)

     การป้อนข้อมุลจำนวนมาก  จะต้องออกแบบ ให้ทำงานได้เร็ว
     - เอกสาร + ลำดับการป้อน "หน้าจอ" จะต้องเรียง เหมือนกัน!
     - ช่องที่จะป้อน จะเรียงลำดับ  (เหมาะสำหรับกดปุ่ม [Tab] ไว้) กับ   ตำแหน่งแหน่ง "มือ" ได้แบบเร็ว

     ปุ่ม  [Tab]   ใช้ "ข้าม" ช่องป้อนไปช่องถัดไป (ถอยกลับ กดปุ่ม [Shift] ค้างไว้แล้วกด [Tab]) 
        - เร็วกว่า  กด ปุ่ม ลูกศร (ซ้ำๆๆๆๆๆ)  หรือ  ย้ายไปจับ Mouse
     ปุ่ม [Field Exit]    ถือว่า ป้อนข้อมูลช่องนั้น "เสร็จ" และให้ขยับไป  ช่องถัดไป
            กรณีป้อนตัวเลข  จะสั่งขยับ ตัวเลขชิดขวาให้
            คนรุ่นเก่า  อาจจะตั้ง keyboard ให้เป็น  ปุ่ม [Enter]   เพราะใช้บ่อย
            ปุ่ม [Ctrl] ด้านขวา   จะตั้งค่าเป็น  [Enter] แทน

     ปุ่ม Function Key (แถวบน คีย์บอร์ด)  ใช้แทน  คำสั่งที่ใช้บ่อย  (สามารถตั้งค่าได้)
       F1,F3 = Exit        ยกเลิก (มักใช้)   สิ้นสุด คำสั่ง/โปรแกรม
       F4: = Prompt       คล้ายกับ Help ถ้าป้อนคำสั่งบางส่วน  กด Prompt จะแสดงรายละเอียดคำสั่ง
       F9: = Retrieve     ดึงคำสั่ง ก่อนหน้ามา (ช่วยป้อน)
       F12: = Cancel     ยกเลิก (มักใช้)   ยกเลิก การทำงาน step ล่าสุด (อาจจะมีหลาย step)

     ปุ่ม Attention  (CA/400 ส่วนใหญ่ จะตั้งไว้ที่   ปุ่ม [Esc])  สามารถตั้งค่าได้
           เช่น  เปิดใช้ Command Line ใหม่  (ซ้อนหน้าจอ  มุมขวาบนจะบอก ระดับการเรียก)
     ปุ่ม System  Request  (CA/400 ส่วนใหญ่ จะตั้งไว้ที่   ปุ่ม [Esc] + Shift)
           ใช้เพื่อติดต่อ กับ OS (คำสั่งพื้นฐานจำเป็น)  เช่น  เปิดจอที่ 2, ดู Message, SignOff
     ปุ่ม PageUp, PageDown   เลื่อนหน้าจอ กรณีข้อมูล มีมาก (หลายหน้า)

4 : Managing Your Work

      การจะจัดการงาน  (เรียกโปรแกรมป้อน, ขอดู Message , สั่งพิมพ์ ,สั่งย้าย Spool, ...) 
ก็ต้อง รู้/เข้าใจ  พื้นฐาน  การทำงาน  ก่อนน๊ะครับ 

ชื่องานที่ทำอยู่ - จะต้องบอกให้ครบ ตามนี้
- Job (ชื่อจอ ,ชื่อที่ตัวเอง ตั้งไว้)
- User Name (ที่ SignOn)
- Number (เลขที่ Run No)

ถ้าทำงาน ไม่พิสดาร มีเทคนิคที่  ทำให้  บอก "ชื่อสั้นๆ" ได้
  เช่น  User ชื่อนี้   (ณ.เวลานี้) ใช้คนเดียว  เปิดใช้หน้าจอเดียว ไม่สร้างอะไรใหม่ในช่วงนี้
          ใช้ชื่อ จอ  หรือ ชื่อ User Name (ตัวใดตัวหนึ่ง ก็พอ - แต่กลุ่มนี้  มีน้อยครับ)

          ถ้าการใช้งาน  ที่ซับซ้อนขึ้น   การชี้  "ชื่องาน" ต้องบอกให้ครบ เช่น 
          - PC นี้   เปิดใช้หน้าจอ  และ เป็น Secondary Screen (บริษัทผมเรียก กลับหน้าจอ)
          - PC นี้   User Name เปิดใช้ 3 หน้าจอ 3
          - User Name เปิด หน้าจอ ที่ 3 PC   

ภาพแสดง  "ชื่องาน"  (ดูได้ เมื่อเรียก  System Request + 3) 
ภาพแสดง  Message ที่เตือนว่า  "ชื่องาน" ทำอะไร ? เป็นอย่างไร ?

งานใน OS/400 แบ่งเป็น 4 ชนิด (เวลาถาม ให้บอกว่า คุยเรื่องอะไรก่อน)
- งานชนิด Interactive (งาน ที่ใช้ผ่านหน้าจอ)
- งานชนิด Batch (ทำงานเบื้องหลัง - ไม่มีหน้าจอ)
- งานชนิด Communication
- งานชนิด System (Message, Spool File  หรือ รายงาน, ...)

5 : Explore the System

Object = ชื่อ/คำ  (ยาว 10 อักษระ)  เช่น  ชื่อคำสั่ง, ชื่อโปรแกรม, ...
Library = ที่เก็บ (จัดกลุ่ม) Object
# โปรแกรม,File ชื่อเดียวกัน   อยู่ใน Library  2 ตัวได้ (ไม่ได้บอกว่า เป็น โปรแกรม,File  ตัวเดียวกัน ที่ Copy ซ้ำ)

Object เป็น ได้หลายชนิด  ดูชนิดได้จาก  Object Type
เช่น Program (*PGM) , File (*FILE), Job (*JOB), Device (*DEV)

ชื่อที่ไม่ควรไป  "แก้ไข"  คือ ชื่อที่ขึ้นต้นด้วย "Q","#" - เป็น Lib หรือ Obj ที่ IBM ใช้งาน
(คล้ายก้บ   การที่เราไม่ควรเข้าไปยุ่งกับ  C:\Windows)
เช่น  QSYS, QIBM เป็นต้น

การใช้ คำสั่ง

ต้องจำครับ       DspMsg  = Display Message
                         StrPrtWrt = Start Printer Writer
                         EndWrt    = End Writer
                         HldOutQ = Hold Output Queue

สังเกต ใช้อักษรย่อ 3 อักษรต่อ 1 คำ  เริ่มต้นด้วย "กิริยา"
ใช้ตัวช่วยได้ 
- Dsp*   (แสดงคำสั่งที่ขึ้นต้นด้วย Dsp)
- Go  Tape   (แสดงคำสั่งที่เกี่ยวกับ Tape)

Using Online Information

OS/400 มี Manual (คู่มือ) ที่ดีอยู่ในตัวมัน โดยเริ่มต้น กดปุ่ม [F1]
เช่น    กด [F1] เพื่อสอบถาม  หน้าจอนั้น,  กด [F1]  หรือ ป้อน ?  ที่จุดที่  สงสัย
          จะแสดง แบบย่อ และ สามารถดูเพิ่มได้

6 : Message

OS/400 (จนถึงวันนี้ยังพูดไม่ได้) จะคุยกับเราผ่าน Message เช่น  "เฮ้ย! ป้อนคำสั่งผิด" (จริงๆ ไม่มี เฮ้ยน๊ะครับ), "คำสั่งนี้ทำงานเสร็จแล้ว" , "Printer มีปัญหา-กระดาษติด" เป็นต้น

หลายกรณี OS/400 รอ การทำงานของเรา และให้เราตอบด้วย  เช่น  ใส่กระดาษเสร็จแล้ว ทำงานต่อได้  เป็นต้น

Message ที่ OS/400 ส่งไป ต้องมี  "ตู้เก็บ" Queue (เหมือนตู้จดหมาย)
มักจะสร้าง  แยกตามหน้าที่ เช่น  
    QSYSOPR          สำหรับส่งข้อความ  เกี่ยวกับ  OS เช่น Disk เต็ม, Tape ไม่ทำงาน, ...
    ชื่อ User Profile   สำหรับส่งข้อความ  ไปยังบุคคล  (ซึ่งอาจจะ ใช้พร้อมกันหลาย จอภาพได้) 
    ชื่อ จอ,WorkStation    สำหรับส่งข้อความ  ไปยังจอภาพ  (ไม่สนว่า  ใครใช้อยู่) เช่น  โปรแกรมที่เรียกใช้ที่หน้าจอ นี้  ไม่สามารถทำงานได้
    สังเกต การใช้หน้าจอ  เมื่อขอดู Msg (DspMsg) ก็จะได้เห็น Message Queue 2 ตัว (User Profile, ชื่อจอ)

ตย. Msg ที่ QSYSOPR   OS/400 มีอะไรจะบอก "มาก" (งานที่สำเร็จ และ มีปัญหา)
      ผู้ดูแล จะได้เห็นทีละ  "มากๆ"  แล้ว  ตอบ Msg (ตัวที่ OS ต้องการให้เราตอบ)


ตย. Msg ของแต่ละจอ  เมื่อสั่งดู  ก็จะเห็น "คล้ายกับ" QSysOpr แต่จะมีน้อยกว่ามาก


ตย. เมื่อ กด F1 เข้าไปใน Msg  "แต่ละรายการ"  ก็จะเห็น  คำอธิบาย และ คำแนะนำการตอบ




7. Log

ส่วนตัวถือว่า  Log ใน AS/400 น่าสนใจมาก (เยอะมาก) และ จัดได้ดีระดับหนึ่ง
Log  = รายการที่ OS/400 บอกเรา (คล้าย Message) ทั้งสิ่งที่มันทำ (Operate), งาน Security

เช่น   (เมื่อเปิดเครื่อง) เกิดขั้นตอนอะไรบ้าง  (สำเร็จ หรือ Fail - แค่แจ้งให้ทราบ / หยุดรอ)
         (ตอนนี้) มีคน SignOn เข้าระบบ
         Job  123456/User/DSP111  ถูกสั่งปิด โดย QPGMR
         พบ Error(s) ขณะทำ ...   (แจ้งให้ทราบ)
         จอ DSP222 ไม่สามารถใช้งานได้  (C R) ...  รอให้ตอบ (ยกเลิก / พยายามต่ออีกรอบ)
         - ถ้าลืม เปิดครื่อง   เปิดแล้ว  กด "R"
         File  xxx/yyy  เต็ม (C I  R 99999) ... รอให้ตอบ 
         - ยกเลิก / ข้ามขั้นตอนไป=ไม่ write,  พยายามใหม่ (ลดขนาดก่อน) , ขยายเพิ่มชั่วคราว)

มันจะทำงานแบบ "ทันที" (Real Time) - OS/400 ทำงานตลอดเวลา
ดังนั้น Log จะมีขนาดใหญ่  "มาก"  - Admin ต้องคอย "จัดการ" ไม่ให้เต็ม

การจัดการเรื่องนี้  ใช้ทรัพยากรสูงมาก - หลายบริษัทฯที่  กำลังคนน้อย,ไม่มีเวลา จะไม่สนใจทำ
(log มาก ใช้เวลา "นาน" ,อ่านไม่ทัน ,ส่วนใหญ่แค่รับทราบ, บางเรื่องก็ไม่รู้ว่า "สำคัญ" หรือไม่ ? (ต้องไปอ่านเพิ่มเติม, ...)

ตั้งแต่ ค.ศ.2017  มีกฏหมายเกี่ยวกับ Security : ใจความสั้นๆ ตามนี้
- ต้องสามารถบอกได้ว่า  มีใครเข้ามาใช้ระบบ (เมื่อไหร่)  
  ดูบันทึกย้อนหลังดูได้อย่างน้อย ... วัน 
- (เกี่ยวกับ การเงิน)  คนดังกล่าว เข้ามาใช้ ระบบ / Data อะไร ? 

A: System i Navigator

เป็น Application พื้นฐาน  แสดงเป็นรูปภาพ GUI  (Graphic User Interface เหมือน Window)
ข้อดี     สวยงาม, ไม่ต้องจำคำสั่ง ,จัดแบ่งเป็น Column , ค้นหาได้ง่าย
ข้อเสีย  (เล็กน้อย) คือ ต้องตั้งค่าเริ่มต้น (ถ้าไม่ทำ จะมองไม่เห็น) ,ทำงานช้ากว่า ,คนที่จำคำสั่งได้ จะพิมพ์คำสั่งโดยตรง (เร็วกว่า)

สำหรับทุกคน (User, System Operator, Developer, Admin)
การติดตั้ง จะสามารถ "จำกัด" สิทธิการใช้ Menu ได้  (เช่น ไม่ให้ใช้  SQL เป็นต้น)

B: ศัพท์เทคนิค  อีกสักนิด

     - Job ที่เกิดขึ้นใน OS/400    จะต้องทำงานภายใต้  SubSystem 
       ถ้าไม่ได้ตั้งค่า จะมี SubSystem ชื่อ QBase  เป็นตัวจัดการ ตัวเดียว หรือ ไม่อนุญาต
     - เครื่องสำหรับ มีผู้ใช้งาน มากขึ้น  IBM จะแนะนำให้  "แยก" ตามกลุ่มงาน และ Memory
      เช่น QBath, Qinter, QSpool, ...  เป็นต้น  เพื่อให้  "งานในแต่ละกลุ่ม" ไม่ไปแย่ง  Memory
     - เมื่อ SignOn ผ่าน  UserProfile ที่สร้างไว้ ได้กำหนด "ค่าเริ่มต้น" ของ "เส้นทาง" ไว้
       ซึ่งจะวิ่งผ่าน  Routing   เพื่อแยกไปทำงานใน SubSystem แต่ละตัว
     - รายละเอียด ที่กำหนดใน User Profile สามารถจัดกลุ่ม (อีกแล้ว) รวมเรียกเป็น Job Description (JobD)  ทำให้เราสามารถ  "set ค่าซ้ำ ให้กับ User Profile คนใหม่ได้"
     - ใน SubSystem แต่ละตัว  ก็สามารถ  กำหนดว่าจะให้ทำอะไร  ก่อน "เริ่มงาน" หรือไม่ ได้
     #พอก่อน  รายละเอียดเต็มๆ  ต้องไปดู Flow Chart - กว่าจะเกิด Job ใน OS/400

อ้างอิง
http://www.metrosystems.co.th/th/Products/Documents/Training/iSeries%20Introduction.pdf
https://www.slideshare.net/tvlooy/introduction-to-the-ibm-as400
https://www.scss.tcd.ie/SCSSTreasuresCatalog/hardware/TCD-SCSS-T.20121208.068/IBM-AS400-technical-introduction.pdf


วันพฤหัสบดีที่ 15 กุมภาพันธ์ พ.ศ. 2561

DB2/400 Advance

DB2/400 Advance

ทุก DB การจัดการจะ "เหมือนกัน" - มีแตกต่างกันใน รายละเอียด
หัวข้อนี้ จะพูดพยายาม อธิบายทางเทคนิค DB2/400 ในมุมมองทั่วไป น๊ะครับ

มาดูกันว่า  DB Engine คืออะไร ? ทำงานอย่างไร ?
งานพื้นฐาน
- DB ถ้าแค่มีหน้าที่  "จัดเก็บ"  เท่านั้น 
- เขียน SQL แค่นี้   Select *  from  lib.File   (ไม่มีอะไรต่อท้าย)
DB จะทำงานไม่ต่างจาก Text File  (ไม่ต้องซื้อ DB มาใช้)

DB Engine

ในการใช้งานจริง  เราทำมากกว่านั้น  และ  ต้องการ "ความรวดเร็ว"
DB Engine จึงถูกนำมาช่วยทำงาน

DB Engine คือ ชุดโปรแกรมที่ทำงานเบื้องหลัง "ตลอดเวลา"
สำคัญหรือไม่ ?   คงได้ยินว่าเราต้องซื้อ Server เฉพาะสำหรับ DB เลย
แสดงว่า  มันทำงานหนักมาก  ใช้ทั้ง CPU,RAM


ภาพแสดง  จัดการ DB Engine ที่แยก กลุ่ม RAM (Pool)  
ทำงานหนัก หรือ เบา  ดูจาก (Page ถูกเรียกใช้บ่อยแค่ไหน) 


งาน-1 : เมื่อบันทึก ข้อมูล  ลง File,Table 
- มันจะวิ่งไปหา   พื้นที่ว่าง (Disk) และ  สร้างตัวเชื่อมต่อกับ  ข้อมูล row สุดท้าย (link)
  (ไม่ขออธิบาย ระดับลึกกว่านี้น๊ะครับ  มันเยอะไป)
- มันจะสร้าง Run No ให้ประจำ Row  เรียก RRN หรือ  Relative Record Number
  Tip ใน SQL บางครั้ง  ใช้ เพื่อดูว่า  Row ไหน เกิดขึ้น ก่อน/หลัง

เพิ่มสักนิด  ข้อมูล 50,000 rows   การ "ค้นหา" ไปที่ rows สุดท้าย - ค้นหา 50,000 ครั้ง ?
      เพื่อความรวดเร็ว   ข้อมูลจะถูกจัดเป็นกลุ่ม เรียกว่า "Page" (เช่น 1 Page เก็บข้อมูลได้ 4K เป็นต้น) 
      ถ้า 1 row มีขนาด 4 byte  (คิดง่ายๆ) 1 Page จะเก็บข้อมูลได้  1,000 Rows  = จะเกิด 50 Page
      การ "ค้นหา" ข้างต้นจะทำแค่ 50 ครั้ง (ตามจำนวน Page) เท่านั้น  = "เร็วขึ้นมาก" (ว๊าว คิดได้ไงเนี่ยะ)

      แต่ ... ต้องแลกมาด้วย   ทำงานเพิ่มเล็กน้อย
       - จัดการ Page ตรวจถ้า Page  เต็มต้อง  "สร้าง Page ใหม่" ตัวชี้

      เมื่อมีอะไร  "ดี"  ย่อมมีอะไร  "ยุ่ง"  ตามมา  ต้องจัดการ
       - เมื่อลบข้อมูล 1 row  Page ก็จะเกิด "ที่ว่าง"
             ถ้าแต่ละ Page มี "ที่ว่าง" มากไป  จะเสียพื้นที่มาก
             ถ้าให้มัน  "ค้นหา" ในทุก Page ก็ "ช้า"
             >> ถ้าต้องการให้ มันจัดการพื้นที่  ก็ต้องสั่ง "ลดขนาด"   RgzPFM, Shrink, Compact ,...
             คุ้นๆมั๊ยครับ Admin ขอหยุดการใช้งาน 8 ชม. เพื่อ "ลดขนาด" 
             (ธนาคาร หยุดให้ใช้ internet Backing แค่ 8 ชม. ปีละ 3 ครั้งเท่านั้น - ลูกค้า  รับได้มั๊ย ?)

       - File ประเภท DataWareHouse (จำนวน row มหาศาล, ไม่มีค่อย  มีการลบข้อมูล)
         น่าจะปรับ ขนาด Page ให้  "ใหญ่"   (Admin อาจจะมองจัดการอีกระดับ เรียก ทำ Partition)

งาน-2 : เรียงข้อมูล ,"ค้นหาได้เร็ว"

- เขียน SQL ที่มี  Keyword = Order By 
        Select *  from  lib.File  Order By ...

  ทั่วไป  (ไม่จัดการอะไร)   การเรียงลำดับ จะเกิดขึ้นใน  Memory
        ข้อมูล 50,000 rows  เรียก SQL หลายเครื่องพร้อมกัน  Memory  ที่มี ทำงานได้เร็วพอมั๊ย ? 
        >>  ช้าก็  ซื้อ RAM เพิ่มซะ ... (แพง + ใส่จนเต็มแล้ว)
        >>  จัดการ ที่ DB Admin 
               เช่น ให้สิทธ์/แบ่งเวลากันใช้, ข้อมูลใช้บ่อย ให้มันจำไว้ และ เรียกใช้ซ้ำผ่าน Cache

  จัดการ ด้วยการสร้าง "Index"  (โดย DB Admin)
       DB Engine จะสร้าง Table ใหม่  "ที่เรียงข้อมูล"  ตามที่กำหนดไว้  (เช่น เรียงตาม InvoiceNo,Seq)
       เมื่อข้อมูลถูกบันทึก/แก้ไข  ก็ต้องมาทำกับ Table ใหม่นี้ด้วย

  ตย.  ระบบงาน  มีเรียกใช้   SQL   Lib.FileP  Order by Invoice,Seq  บ่อยๆ
  ให้สร้าง   Index  Lib.FileL1  ที่เรียงตาม   Invoice,Seq 
      (หลักการ Index จะเก็บแค่ RRN จาก P-File เท่านั้น)
  ทุกครั้งที่  บันทึก/แก้ไข  - DB Engine จะเพิ่มงาน  ไป "เรียงลำดับ"  ใน Index File ใหม่

   Q: ถ้าอย่างนั้น  ก็สร้างไว้ "เยอะๆ" ซิ  เรียกใช้เร็วดี
   A: ถ้าเข้าใจการทำงาน ด้วย -  Index  มีข้อเสีย  ชัดๆหลายเรื่อง (DB Admin จะเห็น)
        เช่น  มันทำงานหนักกว่า  ปรกติ    (5 P-File อาจจะสร้าง Indexไว้ 
                Dev จะมองว่าถ้า SQL Order By แล้วช้า  "ให้สร้าง Index ก็จะเร็ว"
                - Dev เขียน SQL ไว้  15 ตัว = ก็จะสร้าง Index ไว้ 15 ตัว
                DB Engine   ต้อง เพิ่ม(เสีย)เวลาทำงานกับ Index 15 ตัว 

Table ในระบบมี  500 File  อาจจะมี Index มากกว่า 5,000 File (ไม่ใช่ เรืองเล็กแล้ว)
ในขณะที่  "ความจริง"  Index ที่  "ต้องสร้าง"  อาจจะแค่  2-3 ตัวเท่านั้น
>> ถ้าระบบงานขนาดใหญ่  จึงต้องมี DB Admin  ตรวจ และ สร้าง Index
>> โดยใช้เครื่องมือ เช่น  Query Profile  บันทึกว่า  ช่วงเวลานี้   มีใครเรียกใช้ SQL อะไรบ้าง ?,เรียกถึ่แค่ไหน ?  ใช้เวลา "รอ" นานมากแค่ไหน  -> จำเป็นต้องสร้าง Index หรือไม่ ?
       
ภาพแสดง 1 Physical File มี Index (L-File) 9 ตัว
Index File บางตัว  ขนาดใหญ่  พอๆ กับ Physical File เลย

- ใช้ประโยชน์ จาก Index ต่อยอด  ใน   SQL ที่มี  Keyword = Where 
        Select *  from  lib.File  Where ...
  ถ้าพบว่า  Field ที่อยู่ใน  Where   มันเรียงลำดับ  เป็นส่วนหนึ่งใน  Index
  SQL นี้จะเรียกใช้  Index File

มาดูลึกๆ กันสักนิด

- การค้นหา  จะมีหลายเทคนิค  แต่ละ DB Engine ก็จะเลือก/พัฒนา  เพื่อให้ทำงานให้เร็วที่สุุด
  รายละเอียดลึกๆ มักเป็น "ความลับ" หรือ อ่านแล้วไม่รู้เรื่อง
- ที่เรียนมา คุ้นๆกัน  ได้แก่  Binary Tree - การค้นหา จะทำทีละครึ่ง (ด้านซ้าย หรือ ขวา) 
  เช่น จะค้นหา รหัสพนักงาน=450 จาก 1000 คน มันก็จะค้น ในกลุ่ม 1-500 เท่านั้น 
              ไม่เสียเวลาค้นในกลุ่ม 501-1000
         ใน 1-500 ยังแยกเป็น  1-250 กับ 251-500  มันจะค้นในกลุ่ม 251-500 เท่านั้น
         ...
         ดังนั้น  Page จะถูกจัดกลุ่ม ด้วยว่า  อยู่กลุ่ม 1-500 หรือ 501-1000  เป็นต้น

ลองอธิบาย  แบบชาวบ้าน  ให้  "เข้าใจและจัดการ" กันเองได้
  การ "ค้นหา" มี 2 แบบ คือ
  - ข้อมูล "น้อย"  ไม่ต้องสร้าง Index  ก็ทำงานเร็ว  (DB2/400 เรียก Table Scan)
            กลายเป็นว่า  ถ้าไปสร้าง Index  เครื่อง ก็จะทำงานหนักเกินไป
  - ข้อมูล "มาก"  ต้องสร้าง Index
            ถ้าไม่สร้าง Index  เครื่อง ก็จะทำงานหนักเกินไป

คนที่ต้อง "สร้าง Index"  ต้องคำนึงถึงรายละเอียดข้างต้น  ด้วย  (เริ่มเยอะ)

ภาพแสดง ตัววิเคราะห์การทำงานของ DB Engine

System i Navigator : Visual Explain






เป็นเครื่องมือ  ที่แสดงให้เห็น  DB Engine ทำงานอย่างไร  (เมื่อป้อน SQL)
ตย.ข้างบน 
- ภาพส่วนบน คือ  DB Engine  เรียกใช้  Index (มีกุญแจ) - Where ผมใส่ Field ที่ระบุใน Index File
- ภาพส่วนล่าง คือ  DB Engine  ไม่เรียกใช้ Index - Where ผมใส่ Field ที่ไม่ระบุใน Index File

การเขียน SQL ที่ดี คือ พยายามเขียนให้  "มันเรียกใช้ Index"
เขียน SQL เรื่องเดียวกัน  เขียนได้หลายแบบ  แบบไหน เร็วที่สุดล่ะ

ตย.  SQL 2 แบบนี้ ถ้าให้ผลลัพธ์เหมือนกัน   แบบไหน  "เหมาะที่สุด"
    Select  A.*  b    From  Lib.A  as A
    Left join  Lib.FileB on ...
กับ
    Select  A.*  ,(Select  b from Lib.FileB where ...)  From Lib.A

>> ความเร็ว ของการแสดง   จะดูจาก  "เวลารวมที่ใช้ไป"

ดูลำดับการทำงานของ DB Engine

a. File อะไร ?  กรอง Row หรือไม่   (ถ้ามี   Where เรียกใช้  index  จะเร็ว)
      >> จำนวน Row  หลัง  "กรอง"  ควรจะ "น้อย" 
              เช่น FileA  ได้  200 rows จาก 10,000 rows,  FileB  มีแค่ 50 rows
b. (ผลลัพธ์)  ไปทำอะไร ต่อ
    ทุกๆ FileA  1 rows ต้องไปหารายการที่ตรงกันใน FileB
     - ถ้าไม่มี Index ก็เท่ากับว่า  มันอาจจะ  "ทำงาน" มากสุด  200*50 = 10,000 ครั้ง
     - ถ้ามี Index   มันอาจจะ  "ทำงาน" มากสุด  200 + 200 (ค้นหา) = 400 ครั้ง
    เชื่อมต่อกับ FileA กับ FileB แบบ 1 ต่อ 1  จะได้ผล 200 rows
    เชื่อมต่อกับ FileA กับ FileB แบบ 1 : many  อาาจได้มากสุด=10,000 rows

c. (ผลลัพธ์)  ไปทำอะไร ต่อ
     Where กรองต่อ (ต้องอ่าน/ตรวจ เท่าจำนวน)
d. (ผลลัพธ์)  ไปทำอะไร ต่อ
     Order by (จุดนี้  จะเรียงใน Memory)

จากข้างต้น การลดจำนวน Row (ก่อน), การใช้ Where ที่อ้างอิง Index จะทำให้ "เร็ว"
บางกรณี ทดลองแล้วพบว่า  DB Engine มีสภาพดีมาก ไม่จำเป็น (เสียเวลา) ทำข้างต้น
ส่วนตัว  ทำ/คิด ตามลำดับ


วันพุธที่ 27 ธันวาคม พ.ศ. 2560

Intro DB2/400

Intro DB2/400

 1 hr  (note ย่อสำหรับการสอน)
Scope               ไม่พูดถึง  วิธีใช้ Tool ต่างๆ  StrSDA
                        พอจะคุ้นๆ กับศัพท์ใน  OS/400  (Library, Line command, ...)
                         ติดตั้ง iSeries navigator

RDBMS

Relational Database Management System  ถูกสร้างโดย IBM Lab
(Wiki:  IBM Lab on 1980 (now 2017 = อายุเพียง 37 year เอง))
DB2/400  ก็ใช้หลักการนี้ครบครับ
ใครไม่รู้   ต้องไปเรียน/อ่าน มาก่อน ใครเรียนแล้วลืม  กลับไปทบทวนน๊ะครับ

Popular : MS Access, Oracle, DB/2 ,MS SQL Server , mySQL , SAP ,…
(new Tech  new  Standard)
ObjDB   ex. XML (Wiki:  on  1990 (now 2017 = 27 year))  Internet Web Page –share data without save structure

(new Tech 201x   Concept is standard – but new S/W) 
Big Data    How to save & access unstructure (Google Search by wording  in  col., XML:tag)
NoSQL  ex. Mongol,Neo4J,…    Db that best fit for Data in Internet

Keyword
- Physical Table                 real Data  
- Primary Key (Unique)    ชุดข้อมูล (Field ใน Physical Table)  ที่ระบุแล้วจะได้ข้อมูลแค่ 1 row เท่านั้น
- RunNo      ทุก  row  จะมีเลขที่ ไม่ซ้ำกัน  ปรกติ Db Engine จะ  auto RunNo  ให้
                    DB2  เรียก Relative Record Number (RRN)
                    Delete (ลบ) Record   จะ mark  ทำให้  View ,ใช้ไม่ได้
            DB2:  @ cmd RgzPFM  (= MS SQL Server : Shrink Database, Win:Defragment,...)     
                 ปลด Delete Record ทิ้งจริงๆ (เรียง RunNo ใหม่)
   ขณะทำ  "ห้ามใช้ File นี้" , "ห้าม ยกเลิก คำสั่งนี้"

     ! Access Path,Index เสียหาย  - จะพบเมื่อ ปิด เครื่องแบบ Emergency(ฉุกเฉิน), ไม่ Cancel การใช้งาน
ต้อง rebuild   โดย  (อ่าน) L-file,cmd EdtRbdApขณะทำ  จะใช้ File นี้ “ไม่ได้”
            @ rebuild Accesspath  YX080p - ใช้เวลา 8 ชม. (8:00-15:00)
            OS/400 version ใหม่ (2017 ไม่ค่อยพบปัญหานี้แล้ว)

      # ลด โอกาศปิดเครื่องแบบ Emergency (ไม่ปิดเครื่องเลย),  User ต้องหยุดใช้ก่อน  “ปิดเครื่อง” 

- View             File ที่ใช้จำกัดการแสดง (fix) Col.,Field  (เช่น ให้เห็น 7  จาก 10 col.)
- Index             ใช้ช่วยในการ "เรียง" ข้อมูลที่ใช้บ่อย (เช่น ค้นหา  EmpNo = B6940  ใน  Emp File  จาก  500,000 rows  เป็นต้น)
            @ Nid :   SQL file by   ZTN0N0p  in MS SQL   (>5 min) – Crt Index return data in millisec
Lock Record      use File,View   ขณะใช้ระดับ  row,record  (เปิดแบบ แก้ไขได้)

Design  File,Table

(RDBMS) method by   Normalization (1NF,2NF,3NF,4,5)
- ตาราง รหัสการศึกษา, ความหมาย -> Design Physical File     ได้ 1 ตาราง
- แบบ form (Invoice) -> Design Physical File    ex.  1 File,Head/Detail,Master
Biz
Fields  (PrimaryKey)
Education
EducationCode ,Name
Invoice Head
Invoice Detail
InvoiceNo, Inv_Date
InvoiceNo, Seq, Item,Qty

DB2/400

(after design)
สร้างโครงสร้าง  member(Table Name)  in   Lib/SourceFile (QDDSSRC)  by  (Tool)
  > cmd strSEU, strPDM, WrkMbrPDM              

สร้างโดยระบุ  File Type
-PF = Physical-File   
-LF = Logical File    


โครงสร้าง
IBM-Structure: Lib/File/(Member)/(Record Format)/Col.,Field 
เปรียบเทียบกับ  DB ทั่วไป   เช่น  MS SQL Server, mySQL, Oracle : DatabaseFile/Table/Col.
ส่วนที่เกินมา คือ  (Member)/(Record Format)

- Member จะสร้างให้อัตโนมัติ ตอนสร้าง cmd CrtPF - ปรกติไม่สร้างเพิ่ม
- Record Format ต้องประกาศ  ในโครงสร้าง - ปรกติ จะสร้าง "ตัวเดียว"
[IBM-Structure: Lib/File/(Member)/(Record Format)/Col.,Field]

ตย. การสร้าง Physical File : มี Record Format , Field  อะไร
A..........T.Name++++++RLen++TDpB......Functions+++++++++++++++++
A          R SQL0A0PR                  TEXT('PRACTICE SQL STMT') 
A            L1EDUC         1          COLHDG('EDUCATION')       
A            L1EDNM        30          COLHDG('NAME')            

Tip : ลดความซับซ้อน  สร้างแค่ 1 Record Format เท่านั้น
Data Type ที่ใช้บ่อย ชนิดอักษร A (หริอ ช่องว่าง), ชนิดตัวเลข (S กับ P)

ตย. การสร้าง Logical File - index ผูกกับ Physical File อะไร

A..........T.Name++++++.Len++TDpB......Functions++++++++++++
A          R SQL0A0R1                  PFILE(SQL0A0P)       
A            L1EDUC         1          COLHDG('EDUCATION')  
A            L1EDNM        30          COLHDG('NAME')       
A          K L1EDUC                                         

Tip : ลดความซับซ้อน  ในการจำ Field ใน L-File เท่ากัน P-File
      (อาจเพิ่ม Field ที่ Concat)

ตย.  คำสั่งที่เกี่ยวข้อง (หลังสร้างเสร็จ)
> cmd dspObjd  qsys/*all  objtyp(*Lib)    ขอดูชื่อ  (ชนิด Lib)  ที่มีในระบบ (OS)
> cmd dspObjd  qgpl/*all  objtyp(*file)    ขอดูชื่อ  (ชนิด File)  ใน Lib

> cmd dspFd ,dspFFd    ขอดู  คำอธิบาย ของ (ชื่อ File) , Field ของ (ชื่อ File)
> cmd dspDbR               ขอดู  relation  P-file    มี L-File  อะไรบ้าง

ลองค้น/อ่าน คู่มือ Reference วิธีการป้อน

เทคนิค  การตั้งชื่อ, การ Fix ค่าเพื่อ "ลดการจำ"
Physical File
Logical File
# FileName "P"
# FileName + "Lx"
# (mbr) = FileName ,1 member Only
# (Record Format) FileName + "R"
# (mbr) FileName + "Rx"
# Field Name    id[2] + name[4]

# Base on  only 1 PF
# no    input PK,no use  Is Unique
          # Validate in Program


ระบบเก่า >20 ปีจะมีใช้ :
# Select/Omit
   คล้ายกับ  Where ใน  SQL
     O  OAFINE = ‘*’  (Where  not OAFINE=’*‘)
     S   ALL
# (new) Field  ที่สร้างจากหลาย Field
เช่น    Date = year || month || day
Compile to Object
CrtPF  myLibD/myFileP
            File(qgpl/QDDSSRC)  mbr(myFileP)
            Maxmbrs(1)    Size(*Nomax)

CrtLF  myLibD/myFileL1
           File(qgpl/QDDSSRC)   mbr(myFileL1)
Parm แค่รู้ไว้
CCSID = อังกฤษ  37
Backup-Program : บางระบบใช้เทคนิค 1 Member :1 per period   ต้องสร้างแบบ Maxmbrs(*noMax)    

Stored Procesure   ใช้เฉพาะ  “Win-App” (Handy,VB) call RPG 
นโยบาย(เก่า) : ห้าม Win-App บันทึกลง DB2 โดยตรง (ขาดประสบการณ์)
Trigger   ไม่ใช้งาน
Journal
# ไม่ให้สร้าง  เพราะ  เพิ่มขนาดใน Disk มาก
   (
DB Admin สร้างไว้เฉพาะงาน)


Basic File operation
·        SQL -> Return  Data Set (1 หรือ หลาย Row)   ในรูปของ Memory
·        SQL    เขียน Stored Procedure : code Loop อ่านข้อมูลได้  (มักจะเขียนไว้ใน DB Server)
·        RPG with  DB2 :  
o   RPG  : (ใช้บ่อย) ติดต่อ  อ่านตาม  Index   (use Key)
o   RPG  : ติดต่อ  อ่านตามลำดับ (Run No)   (no use Key , Arrival Sequence)
o   RPG  ชี้ตำแหน่ง row ใน File  +  Code Loop อ่านข้อมูล

Special File
DDM-File             pgm ใน  Server (A35xx )  ต้องการอ่าน  File-A  ที่อยู่ใน (A31xx)
                              วิธียอดนิยม : สร้าง Pfile, Lfile ที่ A35xx   (ทุกคืน) ส่ง Data จาก A31xx ไปที่ A35xx
                              ปัญหา : Master ที่ป้อนใหม่ (ที่ A31xx)  ต้องรอวันถัดไป หรือ mannual ส่ง (Secur จะ
    ex. File ที่มี  ชนิดเป็น  DDMF   ที่ A31xx:  dspobjd   PBIE1x/NEM041*  objtyp(*file)  
      Ø  Cmd  wrkDdmF       ชื่อจากข้างต้น 

WorkShop          
  • cmd CrtPF ,CrtLF       (วางไว้ที่) Lib/name=?   จาก source   qgpl/qddssrc  mbr(...)
                      Chk Result           cmd dspObjD ,dspFd ,dspFFd, dspDbR
  • Insert data         3 row 
                            by iSeries navigator:SQL
                            Optional(Classic)  by > cmd UpdDta ,strDFU
  •          View         ข้อมูล iSeries Navigator:SQL(rrn)
                      Optional(Classic)  by > cmd DspPFM, WrkDbf  (คำสั่งสร้างเอง)
  •     Update date   1 row, Delete data  1 row
! SQL=ง่าย   +  ผิด"ง่าย"       Lib ตนเองทำอะไรก็ได้, Lib จริง ให้บอก Leader (ที่ใช้ SQL ได้) ก่อน

Reference
DB2  for AS/400 Database for Programming  ,version 4 R3M0

วันเสาร์ที่ 15 กันยายน พ.ศ. 2555

วิธีจัดการ Big Data

วิธีจัดการ Big Data

ที่เราเรียนกันทั่วไป  เราจะปล่อยให้เป็นภาระของ DBMS
เช่น SQL Server, DB2, Oracle  จะต้องจัดเก็บ (คล้ายกับการจัดเก็บใน Windows)
อันนี้ไม่ได้หมายถึง Data Warehouse น๊ะครับ

เมื่อข้อมูลที่เกิดขึ้นมีขนาดใหญ่แบบสุดขั้ว  (Big Data)
วิธีแบบที่เราใช้กันทั่วไป  เริ่มไม่เหมาะแล้ว

SQL ข้อมูล 10 K rows, 1 M, 100 M, 1G  จะ "เร็ว" "ช้า" ไม่เท่ากัน
ผู้ใช้อยากได้ ผลลัพธ์ในระดับ น้อยกว่า 3 วินาที
ด้วยวิธีปัจจุบัน   ข้อมูลมาก  อาจจะใช้เวลามากถึง 10 นาที  

วิธีแก้ปัญหา แรกๆ คือ สร้าง Index  
(ถ้า  มักจะค้นหาด้วย field = ID ก็สร้าง Index ด้วย field = ID   SQL ก็)
แต่เมื่อข้อมูลมีขนาดมากขึ้น  Index บน Single Table เริ่มทำงานได้  "ช้า"
ขณะเดียวกัน  ได้เกิดวิธี OLAP  (หรือ Cube,BI)
เพื่อแก้ปัญหาข้อมูลขององค์กรที่มีขนาดใหญ่  หลักการคล้ายๆกัน
โดยการสร้าง Index ให้ครอบคลุมเป้าหมาย (ที่กำหนดไว้) ทั้งหมด
น่าตกใจ  ผลจากการสร้าง OLAP ทำให้เกิดข้อมูล "ขนาดใหญ่" กว่าข้อมูลพื้นฐาน 10-100 เท่า
               แต่เมื่อเรียกใช้งาน  ใช้เวลาเร็วกว่ามาก
วิธีนี้  ผุ้ใช้งานมักจะต้องซื้อส่วนนี้เพิ่มขึ้นมา และมีราคาแพง  ทำให้จำกัดผุ้ใช้งานในวงแคบ
จนกระทั่ง MS SQL Server ได้แถมฟรีมาให้ใช้กัน : )

วิธีถัดไป คือ การแบ่ง Single Table เป็นหลาย Partition  หรือ หลาย Table
คิดง่ายๆ การค้นหาข้อมูล 1 Table = 10M rows  กับแบ่งเป็น 3 Partition (4M,4M,2M)
การค้นหา  ในพื้นที่ก็ต้องเร็วกว่า  แต่ถ้า DBMS ไม่เก่งพอ  ก็เรียกใช้งานลำบาก
ที่ผ่านมาข้างต้น  ก็ยังไม่รองรับข้อมูลปริมาณมาก 
เช่น  Google, Yahoo, FaceBook, ... 

ทำไม Google จึงค้นหาข้อมูล  100,000 rows 
จากหลายเครื่องฯ จากหลายสถานที่ทั่วโลก  ในเวลาไม่เกิน 2 วินาที
Q: ทำงานได้อย่างไร ?
A: ตอบแบบ ง่าย คือใช้วิธีคล้าย Partition  แต่รวมระบบจัดการเข้าไปด้วย

วิธีล่าสุดเรียก  HADOOP (อ่านว่า ฮา-ดูป)
OpenSource = Apache HADOOP
ใครสนใจรายละเอียด  ลองค้นดูคำนี้ครับ 

เพื่อให้การจัดการ สอดคล้องกัน ควรจะรู้เทคโนโลยีใหม่ด้วยครับ เช่น
- เทคโนโลยี Clound ทำให้  ลดขั้นตอนที่ยุ่งยากด้านการจัดการ H/W, OS, DBMS
- ถ้าให้เข้าใจง่าย อาจจะดูอ้างอิงจาก MS (น่าจะเข้าใจง่ายขึ้น) 
- MS ให้บริการ Clound  2 ระดับ 
        * Infra (มีเครื่องให้ แต่ติดตั้ง OS, Sw, App เอง)
        * Platform  (มีเครื่อง, OS  ให้  ติดตั้ง Sw,App เอง)
        * [Service]  เช่น การใช้ FaceBook, Yahoo
- มี Win Azure เพื่อใช้บริหาร Clound
- MS SQL 2012 มีฟังก์ชั่นรองรับ HADOOP  (จัดการง่าย)