ก้าวเข้าสฉู่ บบั ท่ี 4 กับเดอื น 9 เดือนแห่งการเร่ิมต้นของไตรมาสสุดท้าย ฉบบั น้ีต้องบอกว่าออกมาอย่าง ทลุ ักทเุ ล ทมี งานทุกคนตดิ งานหนกั กันหมด ตอ้ ง Go Live โปรเจคชนดิ ทางานหามรุ่งหามค่ากันทุกคน สว่ นตัวผมเองก็ตอ้ งขึ้นเว็บไซตใ์ หม่ของบริษัทใหร้ องรบั การทางานแบบ Responsive Bootstrap ขึ้นเอาฤกษ์ งาม วันท่ี 9 เดือน 9 เท่ยี งคืนเก้านาที กวา่ จะเจยี ดเวลามาป่ันเล่มนไี้ ด้ เล่นนอนป่ วยไปเลยทเี ดียว เล่มน้ีจะขาด คอลัมน์ Bootstrap ของ Nuyie เพราะติดงานหนักป่ันไมท่ ันกข็ อยกยอดไว้เล่มหน้า เดือนกนั ยายน ช่วงปลายฝนกร็ ะมัดระวังเปน็ พเิ ศษ หลายๆจังหวัดประสบปัญหาน้าฝน น้าป่ าหลาก ไป เท่ียวไหนก็ระมดั ระวัง เดือนน้ีเป็นเดือนเปิดตวั ต้นแบบมือถือไรป้ ุ่ม iphone6 กต็ อ้ งติดตามกันว่ากระแสจะแรงขาย ดบิ ขายดอี ยา่ งท่ี ทิม คุ๊กได้เปรยๆไว้หรอื ไม่ สดุ ท้ายนก้ี ็ขอใหแ้ ฟนๆทุกท่านสขุ ภาพแข็งแรง เดินทางปลอดภัย และติดตามนติ ยสารขาเดฟต่อไป เร่ือยๆนะครับ
หลายๆเว็บไซต์ช่ื อดั ง เช่ น Google, Amazon, Facebook, Foursquare และ Twitter ต ่างใช้ ฐานข้อมูลประเภท NoSQL ในการเก็บข้อมูลและประมวลผลข้อมูลขนาดใหญ่ ปัจจุ บันฐานข้อมูลท่ีรู้จักกันโดยท่ัวไป มีอยู่ 2 แบบ คือ เป็นฐานข้อมูลเชิงสัมพันธ์ที่มีรูปแบบการเก็บข้อมูลแบบตาราง ประกอบด้วย Column และRow (ไม่อธิบายเพ่ิมเติมเน่ืองจากนักพัฒนาฐานข้อมูลรู้จักดีอยู่แล้ว) เป็นฐานข้อมูลแบบไม่มีโครงสร้างในตารางหรือ object ตายตัว โดยท่ัวไปจะ เก็บในรู ปแบบ JSON (Javascript Object Notation) รู ปแบบท่ีไม่ตายตัวนั้น ขอยกตัวอย่าง เปรียบเทียบกับ Relational Database ท่ี ตาราง User UserID UserName FirstName LastName DOB NickName 1 [email protected] Apaichon Punopas 13/11/1979 PUP 2 [email protected] Sorakhom Tae 3 [email protected] Sittichai Hurakit Chai [ {UserId:1,UserName:”[email protected]”,FirstName:”Apaichon”,LastName:”Punopas”,DOB:”1 3/11/1979”, NickName:”PUP”} , {UserId:2,UserName:”[email protected]”,FirstName:”Sorakhom”, NickName:”Tae”} ,{UserId:3,UserName:”[email protected]”,FirstName:”Sittichai”,LastName:”Hurakit”, NickName:”Chai”} ]
เม่ือเปรยี บเทยี บการเก็บขอ้ มูลของฐานข้อมูลทั้ง 2 แบบ จะเห็นได้ว่า รายการท่ี 2 และ 3 มีข้อมูลไม่ครบ ทกุ คอลัมน์ ใน Relational Database จะเกบ็ เปน็ คา่ วา่ ง สว่ น NoSQL จะไม่เกบ็ ค่าเลย NoSQL หน่ึงรายการสามารถมี Property แตกตา่ งกันได้ ซ่ึงใน Relational Database หน่งึ รายการ จะมคี อลมั นเ์ ท่ากันหมด NoSQL สามารถคน้ หาแบบ Full Text Search ได้เรว็ กวา่ และเหมาะกับงานท่ีมคี วาม dynamic มากกว่า Relational Database NoSQL ใช้เน้ือท่เี ก็บมากกวา่ Relational เน่ืองจากต้องเก็บช่ือ Property ทุกๆรายการ ขน้ึ อยู่ ฐานข้อมูลแตล่ ะค่ายวา่ มกี ารลดรูปการจดั เก็บหรือไม่ด้วย ท่บี อกว่าใช้เน้ือท่ีมากกวา่ เป็นไปตามหลัก ทฤษฎเี ทา่ น้ัน 1. Key/Value Database การเกบ็ ข้อมูลต้องมชี ่ือคยี ์และค่าท่เี กบ็ เช่น FirstName : “Somchai” (FirstName เป็นคยี ์ , “Somchai” คือคา่ ท่เี ก็บ) 2. Column Orient Database มกี ารจัดกลุ่มคอลมั นเ์ พ่ือใช้ร่วมกับฟังก์ช่ัน aggregate เช่น sum, count, min, max เปน็ ต้น 3. Document databases: เป็นฐานขอ้ มูลในรูปแบบ Document ท่สี ามารถเก็บข้อมูลท่ีมี รูปแบบโครงสรา้ งท่ีหลากหลายได้หลายๆรายการ 4. Graph databases: เป็นส่วนท่ีพัฒนาขึ้นมาใช้เช่ือมโยงความสัมพันธ์ของข้อมูลข้าม object ตามทฤษฎีของกราฟ NoSQL นน้ั มีมากมายหลายตัว ไม่ว่าจะเปน็ Hadoop, MongoDB, Cassadra, Big Table ,etc ซ่ึง ปัจจุ บนั ได้มหี ลายคา่ ยยกระดบั NoSQL ข้ึนไปอีก ซ่ึงปัจจุ บนั พฒั นาขึ้นมาตามทฤษฎีของการสรา้ ง Graph จนกลายเป็น Graph Database ซ่ึงก็มีมากมายหลายตัวอีก ซ่ึงผมเคยใช้อยู่ 2 ตัว คอื Neo4j และ OrientDB ซ่ึงตัวท่ปี ระทบั ใจมากกวา่ คอื OrientDB เน่ืองจาก Performance ดี กนิ แรมนอ้ ย ใช้ ความรู้พ้ืนฐานภาษา SQL ไดเ้ ลย จึงขอนาเสนอใหแ้ ฟนๆผู้สนใจลองนาโปรดักตวั นี้ไปพฒั นาใน โครงการของตน ทำกำร Download OrientDB ไดท้ ่ี www.orientdb.org, http://www.orientechnologies.com/download/
Prerequisite กอ่ นการตดิ ต้ังต้องมีการตดิ ต้งั Java Runtime และ Java SDK กอ่ น สามารถ Download ได้ที่ http://www.oracle.com/technetwork/java/javase/downloads/ index.html 1. แตกไฟล์ orientdb ไว้ท่ีเคร่ือง
2. สร้าง OrientDB path บน Environment Variable 3. กาหนด bin ของ OrientDB ในตัวแปร path
4. เขา้ command prompt พมิ พ์ server
create database local:d:/Databases/TestDB admin admin local graph 5. โปรแกรมจะ Default Port 2424 เป็น Database Port ส่วน Web Control Panel Port จะเป็น 2480 6. เปิด Browser แล้วพิมพ์ localhost:2480 ปัจจุ บนั ฐานข้อมูลเปน็ เวอรช์ ่ัน 1.7 ซ่ึงหน้าตาเปล่ยี นไปพอสมควร สรา้ งฐานขอ้ มูล 1. เข้า Command Prompt พิมพ์ Console 2. Create database คาส่งั สาหรับสรา้ งฐานข้อมูล Create database <database-url> <user> <password> <storage-type> [<db-type>] <database-url> : พาธทใ่ี ชเ้ ก็บไฟลฐ์ านขอ้ มลู รปู แบบการระบุ ดงั น้ี local:d:/Databases/TestDB ตอ้ งใส่ storage-type นาหนา้ path ทร่ี ะบุ <user> : ชอ่ื ผใู ้ ชง้ านระดบั super user <password>: รหสั ผา่ นของ super user <storage-type>:ชนดิ การจดั เก็บขอ้ มลู มี local,plocal,memory,remote <db-type>: ประเภทฐานขอ้ มลู document, graph
ในเวอรช์ ่ัน 1.5.1 นน้ั password ให้ตั้งเป็น admin ไปก่อนค่อยไปเปล่ียนทีหลัง ส่วนเวอรช์ ่ันใหม่ๆ อาจจะมีการแกไ้ ขในหนา้ login แล้ว ทาการแก้ไขคา่ Configuration เพ่ือให้สามารถเข้าหน้า Web Control Panel ได้ ท่ี พาธของ orientdb/config เปิดไฟล์ orientdb-server-config.xml จากน้นั แก้ในส่วน storage 3. บันทกึ แล้วทาการ restart database ใหม่ โดยท่หี น้า console พมิ พ์ disconnect เปิด Command Prompt แลว้ ส่งั server อีกคร้ังจากน้ันเปิด browser พิมพ์ localhost:2080
Login เข้าฐานข้อมูล 4. จะเข้าหน้าจอ Schema ของฐานข้อมูล
G = (V, E) V of vertices or nodes คือ จุ ดเร่ิมและ จุ ดสิ้นสดุ ในการเช่ือมต่อ E of edges or lines คอื เส้นลากจากจุ ด เร่ิมถึงจุ ดส้นิ สุดเพ่ือแสดงความสัมพันธข์ อง vertices การนาทฤษฎีของกราฟมาประยุกตใ์ ช้กับ ฐานขอ้ มูลประเภท NoSQL จะช่วยเติมเต็ม เร่ืองการสรา้ ง Relation ของ Object เหมือนกับฐานข้อมูลแบบ Relational ทาไม Graph Database จงึ เร็วกวา่ ฐานข้อมูลแบบ Relational Database ? ในการสร้าง Relation ระหว่าง Object ใน GraphDB นัน้ ผูใ้ ช้งานหรือผู้ดแู ลระบบจะต้องสรา้ งความสัมพนั ธข์ ้นึ เอง และ เม่ือกาหนดแล้วข้อมูลความสมั พันธ์นน้ั จะยังอยูเ่ สมอ เหมือนเสน้ ท่ลี ากความสัมพนั ธจ์ ากจุ ดหน่ึงไปยังจุ ดหน่ึง ใน Relational Database จะต้องมกี ารเขียนคาส่ัง ในการ join ข้อมูลดว้ ยคีย์ท่ีมคี วามสัมพันธ์กัน ดังน้ันจะมี ข้ันตอนในการ คน้ หา matching คยี ์ท่ตี รงกัน และกรองข้อมูลตามเง่ือนไข left , right ,inner ,full join จึงจะไดข้ ้อมูลมา ดังน้ันจึงทาให้ ช้ากว่า Graph Database ในทางปฏิบัตแิ ล้วจะช้ากวา่ หรือไมน่ ั้นขนึ้ อยู่กับความเร็วของแตล่ ะ Product แตต่ ามหลกั การ Graph Database ต้องเร็วกวา่ เพราะไม่มีข้ันตอนในการ matching
จากหลกั การข้างต้นแสดงตัวอย่างได้ ดงั นี้ Select t.name as Teacher , s.name as Student ,sj.name as Subject ,c.name as Classroom from Classroom c left join Teacher t on c.id = t.id Left join Student s on c.id = s.id Left join Subject sj on c.id =sj.id คาส่ัง SQL ใน OrientDB สามารถใช้ select from Classroom กจ็ ะไดข้ ้อมูลทุกอย่างมา แตใ่ น Relational Database จะต้องเขียนชุดคาส่ัง ดังนี้ ทดลองสรา้ งข้อมูลตามตัวอย่างขา้ งต้น 1. ท่ี Tab Schema กดปุ่ม Add Class
2. สรา้ ง Class ช่ือ Teacher, Student, Subject และ Classroom ตามลาดับ โดยทาการกาหนด superClass เปน็ V คือ Vertices 3. เพ่ิมข้อมูลในแต่ละ Class เร่มิ จาก Teacher คลกิ ท่ี Object Teacher แลว้ กดปุ่ม Create object กดปุ่ม Add Field เพ่ือเพ่ิมขอ้ มูล
4. ใส่ช่ือ Field คือ name และคา่ คือ Teacher A 5. กดปุ่ม Save เพ่อื บันทึกข้อมูล ทาการเพ่ิมขอ้ มูลใน Object Student และ Subject จนเสร็จ 6. เพ่ิมข้อมูลในตาราง Classroom โดยจะตอ้ งทราบ @rid ของแต่ละตาราง หากจาไม่ไดใ้ หเ้ ขา้ ไปท่ี Schema แลว้ กดปุ่ม Query สังเกต @rid
เพ่มิ ข้อมูล ดังน้ี 7. กลบั มาท่หี น้าจอ Query ให้ใส่คาส่งั ดังนี้ select name as classRoom , subject.name as Subject , teacher.name as Teacher , stu dent.name as Student from classroom เม่ือส่ัง Execute จะได้ผลลัพธ์ ดังนี้ จะเหน็ ได้วา่ เราสามารถอ้างถึง property ขา้ ม object ได้เลยหากมีการสรา้ ง link เช่ือมโยงไว้ @rid เป็น row id ท่รี ะบบสร้างให้เองอัตโนมตั ิเพ่อื ใช้ในการอา้ งถึงตาแหน่งของขอ้ มูล
Record คือ หนว่ ยท่ีเลก็ ท่ีสุดในเอกสารการเกบ็ ขอ้ มูล ประเภท Record Document เป็นชุดของขอ้ มูลซ่ึงสามารถเก็บข้อมูลโครงสร้างท่ีซับซ้อนไดห้ ลายลาดบั ช้ัน ซ่ึงตา่ งจาก Relational Database ท่ีเก็บเปน็ ลักษณะตาราง Row Column Flat เป็นการเก็บข้อความตวั อกั ษร ไม่รองรับ Property , Index , ไม่มี Schema RecordID ใน OrientDB จะสร้างฟิลดช์ ่ือ @rid ให้อัตโนมัติในทุกๆ Class ซ่ึงเป็นหมายบรรทัด โดยมี หลกั การต้ังลาดบั ดงั น้ี #cluster:position Record Version ระบบจะตรวจสอบเวอรช์ ่ันให้อัตโนมัติ เพ่อื ไมใ่ ห้เกดิ การ conflict SQL NoSQL ส่วนใหญ่จะไมร่ องรบั ภาษา SQL ต้องเรียนรู้ภาษาใหม่ แต่ OrientDB รองรับการเขียน Query 2 ภาษา คือ SQL และ Gremlin นอกจากน้ันยังรองรบั การเขยี นฟังก์ช่ันด้วย JavaScript ทาให้นักพฒั นา ฐานขอ้ มูลสว่ นใหญส่ ามารถเรยี นรู้ OrientDB ได้เรว็ เน่ืองจากมีความรู้ภาษา SQL ตั้งแต่สมยั เรียนมหาลยั คาสั่งสาหรบั แสดงขอ้ มูลในตาราง ใน OrientDB จะเป็น Class คาสง่ั หลัก ตัวอย่างชุดคาส่งั พรอ้ มคาอธิบาย Select select from OUser สาหรบั OrientDB ถ้าหากต้องการแสดงข้อมูลทกุ Field ไม่ จาเป็นต้องใส่ * หากมกี ารแบง่ cluster ในตกวัาอรยเกำ่ ็บงข้อกมำูลรจดัแลเกะต็บ้อเองกกาสรำรระแบุบข้อบมNูลจoาSกQL cluster ให้พมิ พช์ ่ือ cluster นาหนา้ { select from cluster:OUser สามารถ selec\"tnดamว้ ยe\":R\"eJcaoyr\"d, ID ไดโ้ ดยตรง เช่น \"surname\": \"Miner\", select from [#10:1, #10:3, #10:5] \"job\": \"Developer\", หากตอ้ งการ Select ดว้ ย index ให้ระบุช่ือ {\"inc\"rdneeaaxmtioeนn\"าs:\"ห\":นA[m้า iga 1000\", select value from index:dictionary where\"cokmeypa=ny\"'J:a\"yC'ommodore Inc.\" }, OrientDB รองรบั คาส่ัง SQLพืน้ ฐานตามมาต{ร\"ฐnaาmนeท\":้ัง\"Awmhigeare50,0\"o,rder by ,group by เช่น select from Employee where c\"ictoym=pa'nRyo\"m: \"eC'oomrmdeordobrye Isnucr.n\" ame asc, name asc หรอื select sum(salary) from}Employee where age < 40 group] by job }
Insert นอกจากน้ันยังรองรับคาส่ัง limit เพ่อื จากดั จานวน record เพ่ือ performance ท่ดี ี Update ของโปรแกรมและข้อจากดั ของการรบั ส่งข้อมูลผา่ นระบบเครือขา่ ย select from Employee where gender = 'male' limit 20 Delete และสามารถทา paging คือการแบ่งหน้าในการแสดงผลได้ดว้ ยคาส่ัง skip select from Employee where gender = 'male' skip 40 limit 20 Syntax เหมือน Standard SQL ท่วั ไป insert into Employee (name, surname, gender) values ('Jay', 'Miner', 'M') นอกจากน้ันยังรองรบั JSON Format insert into Employee content {name : 'Jay', surname : 'Miner', gender : 'M'} Syntax เหมอื น Standard SQL ท่วั ไป update Employee set local = true where city = 'London' นอกจากน้ันยังรองรับ JSON Format update Employee merge { local : true } where city = 'London' Syntax เหมือน Standard SQL ท่วั ไป delete Employee where city <> 'London' นอกจากน้ันยังสามารถลบโดยระบุ Record ได้ delete from Employee [#18:0,#18:1]
ภาพลักษณ์ท่สี าคัญท่ีสุดของฐานข้อมูลแบบกราฟคือการจดั การสัมพันธ์ของข้อมูล ซ่ึง NoSQL ส่วนมากยงั จัดการได้ไม่ดีนัก ในส่วนความสัมพันธข์ องฐานข้อมูลมีการใช้งานด้วยโมเดลของ RDBMS – relational database management system มานานกว่า 30 ปี หลกั การท่ัวไป ดังนี้ 1-to-1 relationship ความสมั พันธแ์ บบ 1 ตอ่ 1 คอื ความสัมพันธ์ระหว่างตารางหน่ึงกับอกี ตาราง โดยมีรายการท่ีมคี วามสัมพนั ธห์ น่ึงรายการ ต่อหน่ึงรายการ จากตวั อย่าง ตาราง Customer สมั พันธ์กบั ตาราง Address แบบหน่ึงต่อหน่ึง ซ่ึง หมายความวา่ ลูกคา้ หน่งึ คนจะมีท่ีอยูห่ น่งึ ท่ีเทา่ นั้น ซ่ึงในความเป็นจริงแล้ว ลกู คา้ อาจจะมีมากกวา่ หน่ึง ท่ีอยู่ แต่หากออกแบบใหเ้ ป็นแบบหน่ึงต่อหน่ึงจะมี RDBMS 1-to-1 ความหมายดังท่ีกลา่ วมา ขนึ้ อยูก่ ับแตล่ ะระบบออกแบบ ในตัวอยา่ ง ตาราง Customer จะเก็บแค่ id จากตาราง Address เท่าน้ัน ทาให้ลดขนาดในการเก็บข้อมูล การดึงข้อมูลใน RDBMS หากจะดงึ ข้อมูลของ Luca จะเขยี น Query ได้ ดังนี้ SELECT B.location FROM Customer A, Address B WHERE A.name = 'Luca' AND A.address = B.id ทกุ ๆครั้งท่ีมีการ Query จะมีการ คน้ หาขอ้ มูลจากจากตาราง Customer ท่ีช่ือ Luca และขนั้ ตอนใน การ Matching ระหว่าง A.address กบั B.id 1-to-Many relationship ความสัมพนั ธ์ แบบหน่งึ ตอ่ หลายรายการ RDBMS สว่ นใหญ่จะไม่รองรบั การเก็บค่า แบบ อารเ์ รย์ ตาราง Customer ไม่สามารถเกบ็ RDBMS 1-to-N
Foreign Key ไดห้ ลายๆคีย์ เม่อื เปล่ียนเป็น 1 - * จึงต้องย้าย foreign key มาไว้บนตาราง เน่ืองจากหน่งึ Customer ในความเป็นจรงิ สามารถมีท่ีอยู่ไดห้ ลายท่ีอยู่ดังนนั้ ความสมั พันธจ์ ึงต้องเปน็ แบบ 1-N สามารถเขยี น SQL ดังนี้ SELECT B.location FROM Customer A, Address B WHERE A.name = 'Luca' AND B.customer = A.id RDBMS Many-to-Many Many-to-Many relationship สาหรับเคสท่ีซับซ้อน หน่ึงลูกคา้ สามารถมี ท่ีอยู่ไดห้ ลายท่ีอยู่ และหน่ึงท่อี ยู่อาจมีลูกค้าได้ หลายคน ดงั น้ันความสมั พนั ธ์แบบนี้จะเป็นแบบ many – to – many คอื หลายรายการสัมพันธ์ กบั หลายรายการ การลดความซับซ้อนของการ เก็บข้อมูล แบบ many – to – many ทาได้โดย สรา้ งตารางอกี ตารางเพ่ือเก็บความสมั พันธ์ ซ่ึง จากตวั อย่างจะมกี าร join สองครั้งทุก Record เม่ือดึงข้อมูล สาหรบั RDBMS สามารถเขียน Query ได้ ดงั นี้ SELECT B.location FROM Customer A, Address B, CustomerAddress C WHERE A.name = 'Luca' AND B.id = A.id AND B.address = C.id สาหรบั Document ใน NoSQL และ relational DBMS เม่อื มีข้อมูลมากขึ้นจะทาใหฐ้ านขอ้ มูลช้าลง การ JOIN จะทาใหเ้ กดิ Cost สูง สาหรับ OrientDB มีการบริหารจดั การ relation โดย link ท่ีเช่ือมตอ่ จริง ดว้ ย Recordid ทาใหเ้ ข้าถงึ Record ดงั กล่าวได้โดยตรงไม่ตอ้ งเสียเวลาค้นหาและ matching ซึง Record จะ
มากหรือน้อย OrientDB ก็ใช้เวลาเทา่ ๆกัน แต่สาหรับ Relational Database ย่ิง Record มาก หากมีการ JOIN กจ็ ะทาใหร้ ะบบช้าลง ตอ้ งไดร้ บั การปรับจูนท่ีดี ซ่ึงใน Big Data ความเรว็ เปน็ ส่ิงท่สี าคญั มาก การปรับแต่งความเรว็ ของฐานขอ้ มูลเม่ือมีขนาดใหญ่ เม่ือฐานข้อมูลมขี นาดใหญ่ขึ้นการปรบั แตง่ ท่ีเร็วท่ีสดุ สว่ นมากจะไปทาการสรา้ ง index ในฟิลด์ท่ีมักมี การคน้ หาอยูเ่ สมอ การสร้าง index เปรียบเสมือนการสรา้ งสารบัญ หรอื จัดกลุ่มข้อมูลให้มรี ะเบียบค้นหาได้ง่าย เปรียบเทยี บกับชีวติ จริง หากเรามหี ้องสมุดท่ีมหี นงั สือมากมายหลากหลายรูปแบบหากไม่มีการจดั ระเบียบ ชั้น วาง แยกหมวดหมูห่ นังสอื ท่ีดี กจ็ ะทาให้ค้นหาหนังสือได้ยาก การสร้าง index โดยท่วั ไปฐานขอ้ มูลจะไปสร้าง ข้อมูลอีกชุดท่ีเกบ็ กลุ่มคาในฟิลดท์ ่เี รากาหนดใหเ้ ป็น index และเกบ็ RecordId ไว้ เม่ือเราค้นหาขอ้ มูล ฐานข้อมูลกจ็ ะไปคน้ หาใน index ก่อน เม่ือพบ RecordId กจ็ ะไปดึงขอ้ มูลมาแสดง หาก index มีการจัดเก็บ ผดิ พลาดหรือฐานข้อมูลไม่ฉลาด อาจจะทาให้คน้ หาขอ้ มูลไมเ่ จอ หลักการทางานของ Indexing NoSQL และ Relational Database สว่ นมากใช้หลักการทา index แบบ B+Tree ซ่ึงมีการแบง่ ข้อมูล ดังน้ี
จากภาพ เม่ือทาการคน้ หาคาวา่ Luca การค้นหาจาก Index จะเร่มิ จากกลุ่มของ A-Z ->A-L -> E-L -> H-L จนกระท่งั เจอคาว่า Luca ซ่ึงใช้ท้ังหมด 5 Step การแบง่ ลาดับชั้นข้อมูลเป็นเพยี งตัวอย่างเทา่ นน้ั ซ่ึงแต่ละ ฐานขอ้ มูลกม็ ีอัลกอลทิ ่ึมไมเ่ หมอื นกันซ่ึงอาจจะมีการจัดลาดับได้ดีหรือไมด่ ีกไ็ ด้ ซ่ึง Index กอ็ าจทาให้หาข้อมูลได้ ช้าลงกเ็ ป็นได้หากมีการจัดการท่ีไมด่ ี ข้อเสยี ของ index 1. ช้าลง เม่ือมกี าร INSERT, UPDATE, DELETE เน่ืองจาก ตอ้ งไปจดั การท่ี ตารางของ index กอ่ น จึงจะไป ทาท่ีตารางจริง 2. คน้ หาข้อมูลไม่เจอหาก index เสียหาย ตอนท่ี 5 ออกแบบระบบ CMS
นบั วันประสิทธิภาพของคอมพิวเตอร์แรงข้ึนทุกวนั ชนิดท่ีว่าหากใช้งานท่ัวๆไป ไม่ไดเ้ น้นกราฟฟิคอะไรมาก ความเร็วและแรงเทียบกบั ราคานับวา่ ไปไกลเกนิ ความจาเป็นตามการใช้งานตามบ้านเลยทีเดียว อย่างสมาร์ท โฟนสมัยน้ี บางรายความเร็วมากกวา่ เคร่ืองเซิรฟ์ เวอร์เลยทีเดียว ล่าสุด Intel ผู้นาในการผลติ CPU ไดอ้ อก CPU 8 Cores สาหรับคอมพิวเตอรต์ ามบ้าน i7-5960X Extreme Edition กลุม่ เป้าหมายสาหรับนกั เล่นเกมส์ โดยเฉพาะ สนับสนุนหน่วยความจา DDR4 หน่วยความจาใหม่จะช่วยใหเ้ ร็วขึ้นร้อยละ 50 การถา่ ยโอนขอ้ มูลภายในใน ขณะท่ลี ดการใช้พลังงานระหวา่ งร้อยละ 30 และรอ้ ยละ 40 แกน i7-5960X มคี วามเรว็ สญั ญาณนาฬิ กาสูงสุดของ 3.5GHz แต่สามารถโอเวอร์คล็อกความเรว็ ท่สี ูงขนึ้ รอ้ ยละ 79 เร็วกวา่ Core i7 เปรียบเทียบ Quad-Core ชิป Extreme Edition ตามท่ีอนิ เทล ตดั ต่อวดิ ีโอ 4K เปน็ ร้อยละ 20 ได้เรว็ ขึน้ การแสดง 3D เป็นร้อยละ 32 ได้เร็วข้นึ และการแปลงวิดโี อจาก 4K ถึง 1080p เปน็ รอ้ ยละ 69 ไดเ้ รว็ ข้ึน ชิป Core i7 มี 20MB ของแคชและใช้พลังงาน 140 วตั ต์
เม่ือประมาณเดอื นสงิ หาคมท่ีผ่านมามีขา่ วว่า ร้านพิซ ซ่าในอเมรกิ าได้นา Drone มาส่งพิซซ่าให้แก่ลกู คา้ ล่าสดุ Amazon อีคอมเมิซ ยักษ์ใหญข่ องโลกก็ กระโดดร่วมวงทดสอบ Drone เพ่อื นามาส่งสินค้าให้แก่ลูกค้า เน่ืองจากสามารถลดปัญหาการจราจรและ อุบัติเหตุของคนสง่ สนิ ค้าได้ แต่ยงั มีปัญหาเก่ียวกับเร่ืองระยะทางและสภาพดินฟ้าอากาศมผี ลต่อการควบคุม แต่ เช่ือว่าอกี ไม่นานนา่ จะเร่ิมมีการนามาใช้ในอุตสาหกรรมอยา่ งแพรห่ ลาย แต่สาหรบั บ้านเราผมคดิ วา่ ยังอกี นานท่ี จะนามาใช้ส่งของ เน่ืองจากบ้านเราไมไ่ ด้เดินสายไฟลงใต้ดิน หากนามาใช้งานจริงเจอปัญหาติดสายไฟฟ้า แนน่ อน แค่ส่เี ดอื นท่ีผา่ นมาซีเกทเปิดตัวครั้งแรก 6TB ระดบั องค์กรฮาร์ดดสิ ก์ ไดรฟ์ซ่ึงเปน็ 28% เร็วกวา่ ไดรฟ์ 4TB ท่กี อ่ นหน้าน้ี เม่อื เดอื นพฤศจกิ ายนซ่ึงเปน็ บรษิ ัท ย่อย HGST Western Digital ทาใหใ้ นอุตสาหกรรมสะเทือนดว้ ยการประกาศ 6TB ฮเี ลยี มไดรฟ์ Ultrastar He6 เปน็ ครั้งแรก โดยใช้ฮเี ลยี ม WD ก็สามารถท่ีจะเพ่ิมกาลงั การผลิตไดรฟ์ 50%; ท่สี าคญั มันช่วยลดการใช้พลังงานโดย 23% และน้าหนกั โดยรวม 38% เม่อื เทยี บกับไดรฟ์ 4TB ในขณะท่ไี ดรฟ์ WD ใช้ฮเี ลียม ซีเกทกล่าวว่าพวกเขาไม่ไดอ้ อกแบบการใช้งานในอนาคตดว้ ยกา๊ ซ น้าหนกั เบาซ่ึงจะช่วยลดแรงเสยี ดทานในการหมุนดสิ ก์ ในขณะท่ี บริษัท ซีเกทไม่ได้ใช้ฮเี ลียมในไดรฟ์ 8TB ของใหม่กย็ ังไม่ได้ปล่อยรายละเอียดเก่ียวกับวิธีการท่ีสามารถ ท่ีจะเพ่ิมความหนาแน่นใน platters ดิสก์ ปีท่ผี ่านมาซีเกทเร่ิมใช้เทคโนโลยีท่ีเรยี กว่าการบนั ทึกแม่เหล็กมุง (SMR) เพ่ือเพ่ิมความจุ ของไดรฟ์ท่ีนอกเหนือ
4TB ซีเกทไดก้ ล่าว SMR ถือสัญญาของการสรา้ งไดรฟ์ 20TB ในปี 2020 ด้วยเทคโนโลยี SMR ซีเกทได้รับสามารถเพ่มิ ความหนาแนน่ ของบติ ใน platters กว่า 25% หรอื มากกว่า ซีเกทได้พูดถงึ 8TB ตัวใหม่ขององคก์ รความจุ ของฮาร์ดดสิ ก์ 3.5 น้วิ เพ่ิมความจุ ของระบบท่ใี ช้ องคป์ ระกอบนอ้ ยท่ตี ่ากวา่ ค่าใช้จา่ ยพลังงาน ไดรฟ์ท่ีมีวัตตต์ อ่ ความจุ ท่ดี ีท่สี ุดในปัจจุ บันเหมาะสาหรับการ จดั เกบ็ ขอ้ มูลขององคก์ รและบนคลาวด์ ซัมซุงค่ายอุปกรณอ์ ิเล็กทรอนิกสย์ ักษ์ ใหญจ่ ากแดนโสม เรียกได้ว่าขยันปล่อย ไอเดียไม่แพค้ า่ ยจากอเมริกาและยุโรป เลยทีเดยี ว ลา่ สุดมือถือ Galaxy Note Edge ประหยัดเนอ้ื ท่ีด้วยการจดั วางปุ่ม taskbar ไปไวบ้ นขอบมุมโค้งเว้าอย่างมี สไตลเ์ ก๋ไม่ใช่เลน่
ไมโครซอฟท์ยักษ์ใหญ่แห่งระบบปฏบิ ตั ิการของโลก ออกฮารด์ แวร์ระดบั ไฮเอนด์ ขนาดบางสามารถพกพาได้ เหมาะกบั ผูบ้ ริหารระดับสงู มาพร้อมกบั หน้าจอสัมผัส 12 นิว้ และความละเอยี ดหน้าจอ 2160x1440 ทาใหม้ ัน เปน็ ขนาดท่ีดีตอ่ สขุ ภาพ สามารถจดบนั ทึกและการแสดงงานพรีเซนเทช่ัน มนั มาพร้อมกบั ชิป Intel i3, i5 หรอื i7 สนบั สนุนแอพพลเิ คช่ันท่รี ันบน Windows 7 เช่นเดยี วกับแอพพลิเคช่ันออกแบบมาเฉพาะสาหรับ Windows 8.1 พร้อมกับแป้นพิมพ์บางและเบา ตอนเด็กๆผมเคยอ่านการ์ตูน (จาช่ือเร่ืองไม่ได้) ซ่ึงเนือ้ หาจะเป็น ประมาณว่ามเี คร่ือง VR Game ขนาดใหญ่ เม่ือเข้าไปเล่นจะมีสว่ นท่ี ตอ่ กับระบบประสาททาให้เหมือนถอดวิญญาณเข้าไปเล่นในเกมส์ ซ่ึง ณ วนั น้ี Sumsug เร่มิ เข้าใกลส้ ู่จุ ดน้ันกบั Gear VR headset ซ่ึงสามารถสร้างภาพจาลองเสมือนจรงิ แบบ 3D มองเหน็ ได้แบบ 360 องศา
เขา้ ส่ยู ุค 3-4 G ค่ายยักษ์ใหญแ่ ต่ละคา่ ยตา่ งๆออกระบบปฏบิ ตั ิการหรือ Tablet หรอื Netbook สาหรบั รองรบั การทางานในยุคท่คี นขาดอินเตอรเ์ น็ตไมไ่ ด้ ล่าสุด Chrome กไ็ มน่ ้อยหนา้ ออก Chromebook ยึดตลาดผูใ้ ช้ ออนไลน์ เพ่ือรักษาฐานลกู ค้าและโฆษณาเอาไว้อย่างเหนียวแน่น มาพรอ้ มระบบปฏบิ ัติการ Chorme OS ท่ใี ช้ ทรพั ยากรของเคร่ืองน้อย และทางานไดอ้ ยา่ งรวดเร็ว ซ่ึงพสิ ูจนม์ าแล้วจาก Browser Chorme ท่ีสามารถ ทางานไดอ้ ย่างรวดเร็วกวา่ Browser อ่ืนๆ
CSS List ใช้สาหรับปรับแต่งสไตล์ใหก้ บั HTML Element สาหรับจดั ลาดบั ข้อมูล เช่น ul,ol ตวั อย่าง ปรบั สไตลใ์ ห้ให้กับ ul (http://jsfiddle.net/apaichon/xyrym1nd/) ul.a { list-style-type: circle; } ul.b { list-style-type: square; } ol.c { list-style-type: upper-roman; } ol.d { list-style-type: lower-alpha; }
<ol class=\"c\"> <li>HTML 5</li> <li>Java Script</li> <li>CSS</li> </ol> <ol class=\"d\"> <li>HTML 5</li> <li>Java Script</li> <li>CSS</li> </ol> กาหนดเปล่ียนรูปการจัดลาดบั หากตอ้ งการเปล่ียนรูปการจัดลาดบั ทาไดด้ ังน้ี http://jsfiddle.net/apaichon/t302r8nm/ <ul class=\"a\"> <li>HTML 5</li> <li>Java Script</li> <li>CSS</li> </ul> <ul class=\"b\"> <li>HTML 5</li> <li>Java Script</li> <li>CSS</li> </ul>
ul { list-style-image: url('http://cdn.flaticon.com/png/64/19945.png'); } แก้ไขปัญหาสาหรบั ต่าง Browser การแสดงผลในแต่ละ Browser อาจจะให้ผลลัพธ์ไมเ่ หมือนกัน การแก้ปัญหาการแสดง marker ใน CSS ท่ี รองรับทุก Browser ทาได้ ดังน้ี http://jsfiddle.net/apaichon/ezgoksce/ ul { list-style-type: none; padding: 0px; margin: 0px; } ul li { background-image: url('http://cdn.flaticon.com/png/64/19945.png'); background-repeat: no-repeat; background-position: 0px 5px; padding-left: 14px; }
สามารถกาหนดคุณสมบัติ ของ List แบบสั้นๆ โดยสามารถกาหนดได้ทกุ แบบใหค้ าส่ังเดยี ว ทาได้ดังน้ี http://jsfiddle.net/apaichon/o080wy0k/ คุณสมบัติของ CSS List มีดังน้ี คุณสมบัติ รายละเอยี ด list-style All in one, กาหนด list style ได้ทุกอย่างในคาส่ัง เดยี ว list-style-image กาหนดรูปภาพของ marker list-style-position กาหนดตาแหนง่ ของ markerให้อยูภ่ ายในหรอื ภายนอก ของเน้อื หา list-style-type ประเภทของ list เช่น circle, square, upper-roman, lower-alpha list-style Sets all the properties for a list in one declaration list-style-image Specifies an image as the list-item marker list-style-position Specifies if the list-item markers should appear inside or outside the content flow list-style-type Specifies the type of list-item marker ตอนท่ี 5 CSS Table
ร้านกาแฟริมแม่น้าไม่ไกลจาก กรุงเทพสักเทา่ ไร บนถนนพุทธมณฑลสาย 7 บรรยากาศสดุ รม่ ร่ืน หากวันหยุด ไมร่ ู้จะไปไหน พาแฟน พาเพ่ือน มาน่งั เมาส์จิบ กาแฟริมน้า ฟังเพลงสบายๆ รบั อากาศเย็นริมแม่น้า อะไรมนั จะสุขปานนี้ ขอแนะนาร้านกาแฟ RIVA
การเดินทาง ขับ ถ.บรมราชชนนีมุ่งหน้า นครปฐม >> หลังข้ามสะพานข้าม แม่น้านครไชยศรี ให้ชิดซ้าย >> เลย้ี วเขา้ ถ. พุทธมณฑลสาย 7 >> ขบั ไปสัก 500-600 เมตร >> เลยี้ วซ้ายเข้าวัดหอมเกรด็ (ขบั เข้าซุ้มประตูวดั ) >> ขับต่อ ตรงไป ตากด็ ูป้าย รร.ปานเทวไี ว้ ครับ (ป้ายเล็กนดิ นงึ ) ขบั ตามป้ายจนถึง รร.
– AngularJS Library สาหรับพฒั นาการ Authentication ดว้ ยเว็บช่ือดงั อย่างเช่น facebook, google+ ,LinkedIn, Twitter https://github.com/sahat/satellizer
– Library สาหรับทา Responsive ใหก้ ับ Chartist นอกจากน้ันยังมี chart รูปแบบตา่ งให้ใช้มากมาย http://gionkunz.github.io/chartist-js/ https://github.com/Ehesp/Responsive-Dashboard ใช้งานร่วมกนั ระหว่าง AngularJs และ Bootstrap เพ่อื ทา Responsive
https://github.com/chriskiehl/Gooey ใครท่ีเบ่ือพิมพภ์ าษาอังกฤษผิดๆถกู ๆ และจาเป็นตอ้ งส่ังงานด้วย command line ลองใช้ tool ตัวน้แี ปลงเป็น หน้า GUI สิ Javascript Framework ท่ีรองรับการ Binding แบบ 2 ทศิ ทาง https://git hub.com/g wendall/w ay.js
Elements ใหม่ๆสาหรับฟอร์ม Elements ใหม่สาหรบั ฟอร์มใน HTML5 ได้แก่ datalist keygen output datalist element Datalist element ประโยชนข์ องมันมี ดังนี้ ใช้สาหรบั สรา้ งรายการข้อมูล ตรวจสอบความถูกตอ้ งอัตโนมตั ิในรายการข้อมูลเม่ือพิมพบ์ น input text element เช่ือมตอ่ เขา้ กบั element อ่ืนๆเพ่ือแสดงรายการขอ้ มูล
ตวั อยา่ งท่ี 2.2.1 datalist <input list=\"browsers\"> <datalist id=\"browsers\"> <option value=\"Internet Explorer\"> <option value=\"Firefox\"> <option value=\"Chrome\"> <option value=\"Opera\"> <option value=\"Safari\"> </datalist> Keygen element ใช้สาหรับสร้างรหสั อัตโนมัติ สามารถประยุกตใ์ ช้กับการสรา้ ง activate key , OTP (One time password) หรือสามารถประยุกตใ์ ช้เปน็ security แบบ key-pair ได้ ซ่ึง private key จะถูกเก็บ ไว้ท่ีฝ่ัง client ส่วน public key จะถูกสง่ ไปยัง server
ตวั อยา่ งท่ี 2.2.2 keygen <form action=\"/genkey\" method=\"get\"> Username: <input type=\"text\" name=\"usr_name\"> Encryption: <keygen name=\"security\"> <input type=\"submit\"> </form> Output element ใช้สาหรับแสดงผลลัพธก์ ารคานวณตา่ งๆ ตัวอยา่ งท่ี 2.2.3 output <form oninput=\"x.value=parseInt(a.value)+parseInt(b.value);xa.value=a.value;xb.value =b.value\"> <input type=\"range\" id=\"a\" value=\"50\"> <input type=\"number\" id=\"b\" value=\"50\"> <br/> <label>a : </label><output name=\"xa\" for=\"a\"></output> <label>b : </label><output name=\"xb\" for=\"b\"></output> <label>Sum : </label><output name=\"x\" for=\"a b\"></output> </form>
Attributes ใหมๆ่ สาหรบั ฟอร์มและ input Attributes ใหม่ๆสาหรับฟอร์มและ input มี ดงั นี้ Attributes สาหรบั ฟอร์ม autocomplete novalidate Attributes สาหรับ input autocomplete autofocus form formaction formenctype formmethod formnovalidate formtarget height and width list min and max multiple pattern (regexp) placeholder Attribute autocomplete Autocomplete ใช้ได้ท้งั ระดับฟอร์มและinput ซ่ึงสามารถกาหนด on และ off ได้ ซ่ึงคา่ ท่ี Browser จะทาการตรวจสอบให้อตั โนมัตินั้นเป็นคา่ เดิมท่ีมกี ารป้อนไวแ้ ลว้ input type ท่รี องรบั autocomplete ไดแ้ ก่ text, search, url, tel, email, password, datepickers, range, และ color
ตัวอยา่ งท่ี 2.3.1 autocomplete <form action=\"demo_form.asp\" autocomplete=\"on\"> First name:<input type=\"text\" name=\"fname\"><br> Last name: <input type=\"text\" name=\"lname\"><br> E-mail: <input type=\"email\" name=\"email\" autocomplete=\"off\"><br> <input type=\"submit\"> </form> Novalidate attribute Novaildate attribute ใช้ร่วมกับฟอรม์ เม่ือไม่ต้องการใหม้ กี ารตรวจสอบค่าใน input ท่อี ยู่ภายใต้ ฟอร์ม ตัวอย่างท่ี 2.3.2 novalidate <form action=\"/user_email\" autocomplete=\"on\"> First name:<input type=\"text\" name=\"fname\"><br> Last name: <input type=\"text\" name=\"lname\"><br> E-mail: <input type=\"email\" name=\"email\" autocomplete=\"off\"><br> <input type=\"submit\"> </form> เม่อื กด submit จะไมม่ ีการตรวจสอบรูปแบบอีเมล์
autofocus Autofocus ใช้ร่วมกับ input element เม่อื ตอ้ งการให้ focus อัตโนมัติ ตวั อย่างท่ี 2.3.3 autofocus First name:<input type=\"text\" name=\"fname\" autofocus> form attribute ใน HTML5 สามารถวางคอนโทรลไว้นอกฟอรม์ แต่อ้างถงึ ฟอร์มน้ันเพ่ือส่งค่าไปพรอ้ มกันเม่ือทา การ submit ได้ ตัวอยา่ งท่ี 2.3.4 form First name:<input type=\"text\" name=\"fname\" autofocus> <form action=\"/allqueries\" id=\"form1\"> First name: <input type=\"text\" name=\"fname\"><br> <input type=\"submit\" value=\"Submit\"> </form> Last name: <input type=\"text\" name=\"lname\" form=\"form1\">
formaction ใช้สาหรับส่งคา่ ภายในฟอรม์ ไปยัง url ท่ีตา่ งจาก url ใน action ของฟอร์ม เพ่ือจุ ดประสงค์ท่ี ต่างกัน ใช้ร่วมกบั input type submit หรอื image ซ่ึงอาจจะประยุกต์ใช้ในการเก็บข้อมูลสอง ระบบท่ีมีรูปแบบการเกบ็ ค่าท่ีต่างกัน ตัวอย่างท่ี 2.3.5 formaction <form action=\"demo_form.asp\"> First name: <input type=\"text\" name=\"fname\"><br> Last name: <input type=\"text\" name=\"lname\"><br> <input type=\"submit\" value=\"Submit\"><br> <input type=\"submit\" formaction=\"demo_admin.asp\" value=\"Submit as admin\"> </form> formenctype ใช้เพ่ือทาการเขา้ รหสั เม่ือสง่ ขอ้ มูลไปยัง Server ดว้ ย method post ใช้รว่ มกับ input type submit หรอื image
ตัวอย่างท่ี 2.3.6 formenctype <form action=\"/formencetype\" method=\"post\"> First name: <input type=\"text\" name=\"fname\"><br> File name: <input type=\"file\" name=\"fileName\"> <input type=\"submit\" value=\"Submit\"> <input type=\"submit\" formenctype=\"multipart/form-data\" value=\"Submit as Multipart/form-data\"> </form> formmethod คลา้ ยคลงึ กบั formaction แต่จะเป็นการกาหนด method ท่ตี ่างกบั method ในระดับฟอร์มได้ สามารถประยุกตใ์ ช้ในการทาปุ่ม add edit delete ไดภ้ ายในฟอรม์ เดียวกัน ใช้ร่วมกบั input type submit หรือ image ตวั อย่างท่ี 2.3.7 formmethod < form > ID: <input type=\"text\" name=\"id\"><br> First name: <input type=\"text\" name=\"fname\"><br> Last name: <input type=\"text\" name=\"lname\"><br> <input type=\"submit\" formmethod=\"post\" formaction=\"/addPerson\" value=\"Add\"> <input type=\"submit\" formmethod=\"post\" formaction=\"/editPerson\" value=\"Edit\"> <input type=\"submit\" formmethod=\"post\" formaction=\"/deletePerson \" value=\"Delete\"> </form>
formtarget ใช้กาหนดปลายทางเม่ือได้รับการตอบรับจาก server วา่ จะให้ตอบกลบั ไปท่ีไหน สามารถตอบกับไป ยงั url อ่นื ได้ ใช้ร่วมกับ input type submit หรอื image ตวั อย่างท่ี 2.3.8 formtarget <form action=\"/addPerson\" method=\"post\"> ID: <input type=\"text\" name=\"id\"><br> First name: <input type=\"text\" name=\"fname\"><br> Last name: <input type=\"text\" name=\"lname\"><br> <input type=\"submit\" value=\"Submit as normal\"> <input type=\"submit\" formtarget=\"_blank\" value=\"Submit to a new window\"> </form>
height และ width Attribute สาหรับกาหนดความสูงและความกว้าง ซ่ึงใช้ไดก้ ับ input type image เทา่ นั้น ตวั อยา่ งท่ี 2.3.9 height width <input type=\"image\" src=\"../../../images/html5.jpeg\" alt=\"Submit\" width=\"500\" height=\"500\"> list Attribute list ใช้อ้างถึง datalist element ท่ตี ้องการใหแ้ สดงข้อมูลบนคอนโทรล ซ่ึงได้แสดง ตวั อย่างไปแลว้ ในตัวอย่างท่ี 2.2.1 min และ max Attribute min และ max ใช้กาหนดค่าต่าสุด สูงสุด ซึงใช้ร่วมกบั input type number และ range ซ่ึงไดแ้ สดงไปแลว้ ในตัวอย่าง ท่ี 2.1.6 และ 2.1.7
Search