กันยายน 2015

Elasticsearch คืออะไร ติดตั้งอย่างไร ใช้งานอย่างไร พร้อม Workshop ตัวอย่าง

logo-elastic

            ณ ปัจจุบันระบบการค้นหาข้อมูลในระบบของฐานข้อมูล RDBMS (Relational database management system) คงหนีไม่พ้นคำสั่งเหล่านี้ SELECT … FROM [table] WHERE [COLUMN] like ‘%word%’ … ก็ถือว่าเป็นคำสั่งพื้นฐานสำหรับการค้นหาข้อมูลที่ต้องการจาก Database ของเรา ข้อมูลหลักร้อย พัน หรือ แสนแถว ระบบความเร็วในการค้นหาก็ยังถือว่าพอรับได้ แต่เมื่อ Database ของเราเริ่มใหญ่ขึ้นข้อมูลมีจำนวนหลัก สิบล้าน ร้อยล้านแถว ก็เกิดปัญหาเรื่องประสิทธิภาพเรื่องความเร็วในการค้นหาข้อมูล ความเร็วในการค้นหาเริ่มที่จะช้าลงเป็นอย่างมาก … แล้วปัญหานี้จะมีเครื่องมืออะไรมาช่วยได้บ้าง




            ปัจจุบัน เครื่องมือที่ช่วยมาตอบโจทย์เรื่องนี้ก็มีมากมายแบบทั้งที่ฟรีและมีค่าใช้จ่าย แต่ในเมื่อมันมีของฟรีให้ใช้ให้ลอง ทำไมเราจะไม่เอามาใช้ละ

            Elasticsearch ช่วยแก้ปัญหานี้เลย

ต้นกำเนิด Elasticsearch

  • ถูกสร้างเมื่อปี 2010
  • โดยเวอร์ชั่น 0.4 เป็นเวอร์ชั่น แรกที่ถูกปล่อยออกมาให้ได้ใช้งานกัน
  • พัฒนาโดย Shay Banon
  • ถูกพัฒนาต่อยอดมาจาก apache lucene
  • พัฒนาด้วยภาษา Java
  • เวอร์ชั่น ปัจจุบัน 5.3 (อัพเดทเมื่อวันที่ 25-04-2017)

Elasticsearch คืออะไร

  • Open sources (เปิดให้ใช้งานพัฒนาต่อยอด ได้ฟรี)
  • Distributed (การกระจายตัว) & Scalable (ปรับขนาดได้)
  • Highly Availability การการะจายตัวสำรองข้อมูลอัตโนมัติ
  • Document Oriented (พื้นฐานการทำงานทั้งหมดทำในรูปแบบของ Json format) หรือ Haml format ก็สามารถทำได้
  • รองรับการทำงานในรูปแบบของ RESTful API (GET,PUT,POST,DELETE)
  • Full Text Search Engine
  • Real time search and analytics data

การเปรียบเทียบโครงสร้างระหว่าง RDBMS vs Elasticsearch

rdbms_vs_elasticsearch

การติดตั้ง Elasticsearch (1.7.2)

  1. Download Elasticsearch ก่อนจาก elasticsearch-1.7.2.zip
  2. Unzip elasticsearch-1.7.2.zip แล้วจะได้
  3. directory_unzipเข้า folder elasticsearch-1.7.2 ด้วยคำสั่ง
    $ cd elasticsearch-1.7.2
  4. สั่ง run Elasticsearch ด้วยคำสั่ง
    $ bin\elasticsearch.bat

    run_elasticsearch

  5. เปิด Browser แล้วพิมพ์  http://localhost:9200/

localhost

การติดตั้งตัวช่วย เพิ่มการใช้งานของ Elasticsearch ให้ง่ายขึ้นด้วย Marvel

  1. ให้ไปติดตั้ง plugin marvel เพิ่มกันก่อนโดยให้เข้าไปที่ elasticsearch1.7.2 แล้วพิมพ์
    $ bin\plugin -i elasticsearch\marvel\latest (สำหรับ Windown OS) สำหรับผมเคยติดตั้งไปแล้ว
  2. mavelเมื่อติดตั้ง เรียบร้อยให้ Restart Elasticsearch อีกครั้ง (สำหรับท่านใดที่ยังเปิดมันอยู่)
  3. ให้เปิด Browser แล้วพิมพ์ http://localhost:9200/_plugin/marvel
  4. mavel_1ส่วนเมนูที่เราจะเข้าไปใช้งานกันก็คือ เมนู Sensemavel_2
  5. เปิดมาแล้วก็จะพบ  UI แบบนี้

mavel_3




ตัวอย่างการใช้งาน ทำระบบ ร้านหนังสือ

กำหนดค่า

INDEX (DATABASE ใน RDBMS) :: bookstore

TYPE (TABLE ใน RDBMS) :: book

DOCUMENT (ROW ใน RDBMS) :: 1,2,…

FIELD (COLUMN ใน RDBMS) :: {“name”: “value”,”price” : value , “page” : value,”published_date” : value}

ตัวอย่าง

การเพิ่มข้อมูล (ต้องการเพิ่มข้อมูล หนังสือโดยให้มีเลข Document เท่ากับ 1)

PUT bookstore/book/1

{

     "name"  : "poolsawat.com",

     "price" : 390,

     "pages" : 200,

     "published_date" : "2015/09/23"

}

 

create

การแก้ไข (ต้องการแก้ไขข้อมูลหนังสือ ที่ Document ที่ 2)

POST bookstore/book/2

{

    "name"  : "poolsawat.com id 1",

    "price" : 490,

    "pages" : 200,

    "published_date" : "2015/09/23"

}

 

update

การลบ DELETE (ต้องการลบข้อมูลที่มีเลข Document เท่ากับ 2)

DELETE bookstore/book/2

delete

การค้นหา (ต้องการค้นข้อมูล ทุก Field ที่มีคำว่า “poolsawat.com”)

GET bookstore/book/_search?q=poolsawat.com

search

DLS (Domain Specific Language) search การค้นหาแบบขั้นสูง (ต้องการค้นหาข้อมูล ที่ Field ชื่อว่า name ที่มีค่า “poolsawat.com” กรองข้อมูลด้วยว่า ราคาหนังสือต้องมากกว่าหรือเท่ากับ 300 บาท)

GET bookstore/book/_search

{

    "query": {

       "filtered": {

          "query": {

               "match": {

                   "name": "poolsawat.com"

                }

            },

            "filter": {

                 "range": {

                     "price": {

                           "gte": 300

                       }

                  }

             }

         }

     }

}

 

dls_search




สำหรับฟังก์ชันสำหรับการ search ของ Elasticsearch นี้มีเยอะมาก จากตัวอย่างการค้นหาเป็นเพียงส่วนหนึ่งของการค้นหาแบบทั่วไป

สำหรับใครที่ต้องการดูข้อมูลเพิ่มเติมหรือกำลังต้องการหา Video เรียนผมแนะนำ coursesquare สอน Elasticsearch

ขอขอบคุณ แหล่งที่มารูปภาพประกอบ :: http://www.sprint3r.com/

แนะนำ Chrome App Launcher By Google ของเขาดีจริงๆ

google_web_app_lancher_0

แนะนำแอพที่พัฒนาโดย Google ที่น่าใช้งานกันหน่อย ผมได้ลองใช้แล้วชีวิตง่ายขึ้นเพิ่มไปอีก ขอแนะนำแอพที่ชื่อว่า Chrome App Launcher ที่บอกเลยว่ามันดีมาก ดีอย่างไรนะเหรอ

ปกติเราจะเข้าใช้งาน Application ต่าง ๆ ที่ดาวน์โหลดมาจาก Chrome Web Store แต่การที่จะใช้งานแอพแต่ละครั้งต้องลำบาก เพราะต้องเปิดการใช้งานผ่าน Browser Chrome ก่อนแล้วถึงจะเรียกเปิดการใช้งานแอพที่เราต้องการจะใช้งานได้ ผมก็ว่ามันลำบากเลยไม่ค่อยได้เข้าใช้งานมากนัก พอดีไปเจอแอพ Chrome App Launcher นี้มาเลยของใช้งานของเขาดู มันยอดนิหว่า การติดตั้งก็ไม่นาน แถม UI ก็สวยด้วย การเข้าใช้งานก็ง่าย คนที่ไม่ค่อยถนัดใช้งานคอมพิวเตอร์ ก็สามารถใช้งานแอพนี้ได้ โดยการใช้งานก็ไม่ได้ยากอะไรการติดตั้งก็ง่ายแสนง่ายเข้าไปโหลดเพื่อมาติดตั้งได้เลยจากลิ้งนี้ Chrome App Launcher Link Install

หลังจากติดตั้งสำเร็จเรียบร้อยก็จะเห็น Icon ตาราง 4 สี นี่ก็คือ Icon ของ Chrome App Launcher นี้

google_web_app_lancher_2

ให้เราคลิกเปิดมันขึ้นมาแล้วก็จะได้หน้าตาแอพแบบนี้

google_web_app_lancher_1

ซึ่งถ้ามองดู Icon ภายในแล้วมันก็คือแอพหลักของ Google นั้นเอง แต่การที่จะใช้งานแอพพื้นฐานที่ติดมากับ Chrome App Launcher นี้ได้ต้อง Sign In Account ของ Google ซะก่อนซึ่งถ้าใครยังไม่มี Account ของ Google ก็ไปสมัครได้เพราะไม่มีค่าใช้จ่ายใดๆ ทั้งสิ้น

ข้อดีของ Chrome App Launcher ที่ผมคิดว่ามันดีก็คือ ใช้งานง่ายขึ้น และอีกอย่างคือสามารถติดตั้งแอพ อื่นๆ ใหม่ ๆ เพิ่มได้อีกมากมาย

ตัวอย่างผมลง Chrome App Launcher แล้วผมอยากติตั้งโปรแกรมปฏิทินส่วนตัวผมก็ไปหาโปรแกรมใน Chrome Web Store ก็ไปเจอแอพนี้

google_web_app_lancher_4

ซึ่งมันดูดีเลยทีเดียว ไม่รอช้าผมก็ติดตั้งมันเข้าไป การติดตั้งก็ไม่ได้ยากอะไรคลิกเลือกปุ่มเขียว ทางขวามือบนของหน้าจอข้อมูลแอพและก็รอ เท่านี้เราก็ได้แอพ Calendar เป็นของตัวเองแล้ว สังเกตุว่า icon ของแอพ Calendar ที่เราเพิ่มขึ้นมาใหม่มันจะเพิ่มเข้ามาใน Chrome App Launcher ของเราเป็นที่เรียบร้อยแล้วการมใช้งานครั้งต่อไปเราก็เพียงเปิด Chrome App Launcher ขึ้นมา

google_web_app_lancher_3

ซึ่ง Icon ของ Chrome App Launcher มันจะอยู่ตรงแทบ Task Bar ของหน้าจอ Windown ของเราแล้วก็เลือกแอพ Calendar ที่เราเพิ่มมา

google_web_app_lancher_6

google_web_app_lancher_5

ง่ายใช้ไหมที่นี้ถ้าเราอยากจะได้แอพต่างๆ ที่ต้องการใช้งานเพิ่มเราก็ไปค้นหาจาก Chrome Web Store ได้เลย

Chrome Web Store :: Chrome Web Store Link

 

 

แบ่งปันสิ่งทีได้จากการเข้าร่วม อบรมคอร์สเรียน Source Code Management ด้วย Git

หลังจากที่ไม่ได้อัพเดทเนื้อหาเพิ่มมานานมาก

และเมื่อช่วงวันหยุดสุดสัปดาห์ที่ผ่านมาได้เข้าร่วมอบรมคอร์สเรียน Source Code Management ด้วย Git ที่ SPRINT3R [n.] (ซพรินเทอร์) ซึ่งบอกได้คำเดียวว่าคุ้มมากจริงๆ มันก็คุ้มตั้งแต่ได้เข้าไปเรียนตั้งแต่วันแรกแล้ว เรียนฟรี อาหารฟรี สอนดีเป็นกันเอง TA เยอะไม่เข้าใจติดปัญหาอะไรถามได้ตลอดเพราะ TA จะเข้ามาประกบติดตัวต่อตัวช่วยเหลือจนกว่าเราจะเข้าใจ หรือแม้แต่ติดปัญหาเรื่อง ใด ๆ ก็จะไปหาคำตอบให้จนได้ สำหรับการเรียนที่ SPRINT3R [n.] (ซพรินเทอร์) นี้บอกได้คำเดียวว่าการได้เข้ามาเรียนคุ้มทุกคอร์สครับ คอร์สเรียนเขามีคุณภาพจริง ๆ

คอร์สเรียน   Source Code Management ด้วย Git (ระยะเวลา 2 วัน ช่วงวันเสาร์ที่ 12 กันยายน พ.ศ. 2558 – วันอาทิตย์ที่ 13 กันยายน พ.ศ. 2558) ณ SPRINT3R [n.] (ซพรินเทอร์) เขาบอกว่ารอบนี้เป็นรอบคืนกำไรสู่สังคม

เนื้อหาคอร์สเรียน

  • Source Code Managment(SCM) คืออะไร?
  • ทำไมเราต้องใช้ SCM และการวางกลยุทธ์
  • SCM ด้วย Git
  • Git คืออะไร?
  • คำสั่งพื้นฐานสามัญประจำบ้านของ Git สำหรับการนำไปใช้งานได้เลย
  • Git กับ Continuos Integration ด้วย Jenkins และ Repository Server
  • อุปนิสัยใจคอและกมลสันดานที่ต้องมีในการทำ SCM
  • อื่นๆ แล้วแต่คนสอนที่จะเพิ่มให้เข้าไป

วันแรกของการเข้าเรียน

ช่วงเข้าเมื่อจำนวนนักเรียนพร้อมก็เริ่มกันเลย

ทีมงานของ SPRINT3R นำโดยพี่หนุ่มแนะนำทีมและพูดเกริ่นนำเรื่อง GIT นั้นว่าคืออะไร มีปีะโยชน์อย่างไร แต่สิ่งที่จำเป็นมากเมื่อผู้ทีใช้งาน GIT จำเป็นต้องใส่ใจมากในการนำ GIT เข้ามาใช้ เรียกว่าถ้าใช้ GIT จำเป็นต้องทำ 4 ข้อนี้

1. ตกลงทีมเรื่องโครงสร้างของ sources code พูดถึงเรื่องโครงสร้างของ source code ของ Project ที่เราพัฒนาว่าจะวางโครงร่างอย่างไร มีไฟล์ มีโครงสร้างอย่างไรบ้าง

source code stucture 2.  ตกลงเรี่องการใช้งาน Feature GIT เรื่องนี้ดูเป็นเรื่องธรรมดาแต่ถ้าเมื่อการพัฒนา Project ใหญ่ ๆ จำเป็นมาก ไม่ว่าจะเป็นเรื่องการแบ่ง Branch การทำงานออกเป็นส่วนๆ เพื่อที่จะติดตามการพัฒาได้ง่ายและนวมถึงคำสั่งพื้นฐานของการใช้งาน GIT เบื้องต้นด้วยเช่น git add,git commit,git push,git pull,… และอื่น ๆ อีกมากมาย

3. การ Merge code บ่อย ๆ เป็นการดูแลรักษาประวัติของการพัฒนาของ branch หลักของการพัฒนา และ ทำให้เห็นประวัติต่างๆ ในการพัฒนา รวมถึงเรื่องการติดตามของประวัติต่างๆ ของการพัฒนา หรือ commit ด้วย

4. เรื่อง commit message นั้นถือเป็นเรื่องจำเป็นมาก ๆ เพราะอย่างน้อยผู้พัฒนาคนอื่นมาดูการ commit code ครั้งนั้นและสามารถเข้าใจได้ง่านว่า นักพัฒนาคนที่ commit code มาเขาได้เปลี่ยนแปลง code อะไร ส่วนไหนไปบ้าง และการใส่ message ที่ดีจะมีประโยชน์ในภายหลังแน่ ๆ เพื่อ git มี Feature การดู log history ได้ ฉะนั้น message ดีจะช่วยให้เรา filter การ message เพื่อหาสิ่งใดสิ่งหนึ่งได้ง่ายๆ

มาดูภาพกาทำงานของ GIT กันก่อนเพื่อความเข้าใจ และจะได้อ่านเนื้อหาต่อไปได้เข้าใจยิ่งขึ้น

git_model

เมื่อเกริ่นเนื้อหาของ GIT กันได้คราว ๆ พอเข้าใจแล้วก็มาเริ่มการใช้งาน GIT กันเลย

 

เริ่มต้นก็ต้องไปติดตั้ง GIT ในเครือง Local ของเราก่อน

1. ลิ้งการ Download GIT :: GIT-SCM

หลังจากติดตั้งเสร็จก็ให้เปิด Git Bash ขั้นมาจะได้หน้าตาแบบนี้ (ขอพูดในเวอชั่นของ Windown นะครับ)

git_bash

 

2. เริ่มคำสั่งการใช้งาน พื้นฐาน สร้าง local repository กันก่อน

$ git init

$ git status

คำสั่ง git status จำเป็นมากครับ เพื่อดูสถานะของการทำงาน ณ ปัจจุบันเลยว่าตอนนี้เราทำอะไรอยู่

3. ต่อไปลองสร้างไฟล์เพื่อทดสอบ (สร้างไฟล์อะไรก็ได้ คิดไม่ออกก็ hello.txt ไปก่อน)

4. เพิ่ม file ทดสอบเข้า stage area เพื่อรอการ commit code ไปยัง local repository โดยใช้คำสั่ง

$ git add hello.txt

5. เมื่อเรา coding จนพอใจและ add file ไปเก็บไว้ที่ stage area จนคิดว่าพอแล้วก็ต้อง นำไฟล์เข้า local repository ซะที โดยใช้คำสั่ง

$ git commit -m “create file hello.txt”

มาถึงขั้นตอนนี้ ไฟล์ทั้งหมดที่เราได้ add เข้าไปจะมาเก็บใน local repository เรียบร้อยแล้ว

6. เนื่องจาก local repository ยังเป็นการเก็บไฟล์ไว้ที่เครื่องเราเครื่องเดียวเท่านั้น ดังนั้นถ้าอยากให้ทีมพัฒนาของเราได้ source code ชุดนี้เราต้องทำการ push source code เหล่านี้ไปยัง remote repository โดย workshop ครั้งนี้ขอใช้ github ที่กำลังโด่งดังอยู่ในตอนนี้ ก็ให้เราสมัครให้เรียร้อย สำหรับคนที่ยังไม่มี account github เป็นของตัวเองก็ไปสมัครได้ ไม่มีค่าใช้จ่ายในการสมัคร และสร้าง remote repository ให้เรียบร้อย

 

 

github_create_project_day1

 

github_link_remote

ได้ remote repo เรียบร้อยแล้วก็ copy link มาเพื่อเอามาเชื่อมต่อกับ local repo ในเครื่องเรา และใช้คำสั่ง

$ git remote add origin [email protected]:pool13433/day-11.git

เท่านี้ remote repo และ local repo จะรู้จักกันแล้ว หลังจากนั้นก็ push เพื่อเราไฟล์จาก local repo ไปยัง remote repo โดยใช้คำสั่ง

$ git push origin master

เราก็จะได้ source code ในเครื่องเรา เหมือนกับ code บน server github เรียบร้อยแล้ว

$ git log

คำสั่ง git log เอาไว้ติดตามดู history ของการทำงาน git ว่าเราทำอะไรผ่านไปแล้วบ้าง

 

เมื่อลองใช้งานคำสั่งได้กันบ้างแล้วเหล่าพี่ ๆ sprint3r ก็จัด workshop เล็ก ๆ มาให้เล่นกันเล่น

และก็จบไปสำหรับวันแรกของการเรียน GIT

 

วันที่ 2 ของการเรียน git

วันนี้เริ่มด้วยการเอาเนื้อหาของการเรียน class เมื่อครั้งที่แล้ว (ก็วันเสาร์แหละครับ) มาสรุปทบทวนกัน และพี่ปุ๋ย (Somkiat.cc)ก็มาพูดถึงความสามารถอื่น ๆ ของ GIT ตัวอย่างเช่น

การ filter ดู history log จาก message,date,… ต่างๆ อีกมากมาย

ช่วงบ่ายทางทีมจัด workshop มาให้ทำกัน ครั้งนี้จะได้เริ่มรวมทีมเพื่อใช้งาน git กับ project จริง ๆ แล้ว

โดย workshop จะมีข้อมูลว่า

  • มีการตั้งโจทย์ หรือเรียกว่า requirement ของ user ก็ว่าได้
  • ให้รวมทีมกันทำโดยให้ระยะเวลาในการพัฒนา 3.30 ชม.
  • โดยเมื่อหมดเวลาจะต้องมีงานส่ง

หลังจากระยะเวลาได้ผ่านไปเรื่อย ๆ ระหว่างนั้นพวกเราก็สร้าง Project ที่พัฒนาด้วยการใช้ git ก็ดำเนินการไปเรื่อย ๆ เริ่มพบปัญหา เริ่มได้พูดถกเถียงปัญหา ได้ร่วมกันช่วยแก้ปัญหา หาแนวทางแก้ไขปัญหาร่วมกัน สุดท้ายหมดเวลา พวกเราก็มีผลงานส่งทันตามกำหนด (ฺBUG นิไม่ต้องถาม เพียบครับ)

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

 

เท่าที่ผมได้สัมผัสกับ git ในช่วงระยะเวลา 2 วัน (สัมผัสแบบการพัฒนาเป็นทีม ปกติใช้งาน git คนเดียว) สิ่งที่ดีๆ หลาย ๆอย่างของ git ทำให้การพัฒนา project ของเราเป็นระเบียบและเป็นแบบแผนที่ดีมาก ผมเลยอยากแนะนำ เพื่อน ๆ ให้เริ่มลองใช้งานกับมันดู ถ้าใครยังไม่เริ่มก็ให้เริ่มตั้งแต่วันนี้ เพราะ git จะทำให้ชีวิตของคุณมีประสิทธิภาพมากขึ้น จริงๆ

เครดิต รูปภาพประกอบ :: http://backlogtool.com/git-guide/en/intro/intro1_2.html