Storage Engine ของ MongoDB by heha
Mar0
MongoDB คือ NoSQL ที่ได้รับความนิยมสูงมากในช่วงหลายปีที่ผ่านมา แทบจะเป็นเบอร์หนึ่งในงานทั่วๆ ไปแล้วละมั้ง (แต่ผมยังยินยันเหมือนเดิมว่าไม่ควรใช้โดยที่ไม่มองทางเลือกอื่นก่อน มันไม่สามารถแทน MySQL ได้ 100% จึงควร Choose the right thing at the right job นะครับ อ่านเพิ่มเติมได้ที่บทความเก่าที่นี่) สำหรับคนที่ไม่ได้ตามข่าว ตั้งแต่ MongoDB 3.0 เป็นต้นมา MongoDB ได้ปรับปรุงระบบใหม่ เพิ่มระบบ Storage Engine เข้ามา คล้ายกับ MySQL ที่มี MyISAM และ InnoDB ให้เลือก หรือจะเปลี่ยนเป็น Storage Engine ตัวอื่นก็ได้ตามอิสระ
Storage Engine พูดง่ายๆ ก็คือวิธีการเก็บข้อมูลว่าจะเก็บในรูปแบบไหน อย่างไร ซึ่งเราสามารถ Download Storage Engine จากผู้พัฒนารายอื่นมาเชื่อมต่อได้อย่างอิสระให้เหมาะสมกับลักษณะงานของเราได้ ปัจจุบันมี Storage Engine ดังนี้
- MMAPv1 – แถมมากับ MongoDB ซึ่งถูกใช้งานมาอย่างยาวนานตั้งแต่ MongoDB version แรกจนปัจจุบัน และตั้งแต่เวอร์ชั่น 3.2 เป็นต้นไป จะไม่ใช่ default engine อีกต่อไป หลักการทำงานคือใช้ Memory Map ของ OS มาเป็นตัวช่วยจัดการ Memory ให้ทั้งหมด ไม่มีระบบจัดการ Memory เป็นของตัวเอง ทำให้สมัยก่อนขึ้นชื่อเรื่องสวาปาม Ram อย่างมาก และห้ามมี application ตัวอื่นรันพร้อมๆ กันในเครื่องเดียวกันเด็ดขาด หากต้องการใช้ MongoDB หนักๆ ควรแยกเครื่องออกจากกันซะ มิเช่นนั้น application อื่นๆ จะโดนดูด Ram จนหมดตัว (น่ากลัวไหมล่ะ) และยังมีข้อจำกัดอีกมากมายเช่น ไม่มีระบบบีบอัดข้อมูลที่บันทึกลง Disk ทำให้นอกจากกิน Ram เยอะมากแล้วยังกิน Disk เยอะมากอีกตะหาก และ Collection ของระบบนี้ (เทียบได้กับ Table ใน MySQL) จะไม่มีระบบ Lock เฉพาะ Document เวลาแก้ไข (Document เทียบได้กับ row ใน table) เวลาโดน Lock จะ Lock ทั้ง Collection ซึ่งส่งผลเสียอย่างมากหากต้องมีการแก้ไขข้อมูลเยอะๆ ปัจจุบันไม่แนะนำให้ใช้งานครับ
- WireTiger – เป็น Storage Engine น้องใหม่ที่มาจากการที่ MongoDB ไปซื้อบริษัท WireTiger ผนวกรวมเข้ากับตัวเอง และปัจจุบันเป็น Default Storage Engine ตั้งแต่เวอร์ชั่น 3.2 เป็นต้นไป แก้ไขปัญหาของ MMapv1 ไปหลายอย่างเช่นมีระบบบีบอัดข้อมูลที่บันทึกลง Disk ทำให้ขนาดไฟล์เล็กลง 10 เท่า!! และมีการ Lock ที่ระดับ Document ทำให้ไม่ต้องแย่ง resource กันเวลา update ไม่เกิดการรอกันไปมามากเกินไป และหาก Data Set สามารถยัดลง Memory ได้พอ WireTiger จะเป็น Storage Engine ที่เร็วที่สุดและดีที่สุด! แต่ถ้าข้อมูล Data Set ใหญ่กว่า Memory ความเร็วการใช้งานจะช้าลงเรื่อยๆ อย่างมีนัยยะเลยทีเดียวซึ่งจะหลายเป็น Binary Tree Engine ธรรมดาๆ ไป จึงช้าลง
- PerconaFT – เป็น Storage Engine ที่ต้อง download เป็น MongoDB เวอร์ชั่นพิเศษจากเว็บ percona และจะมีเลขเวอร์ชั่นและ feature ตามท้าย MongoDB ตัวหลักอยู่ประมาณหนึ่ง (ปัจจุบันเป็น MongoDB 3.0 ตามหลังเวอร์ชั่นหลักคือ 3.2) เมื่อก่อนชื่อ TokuMX และโดน Percona ซื้อไป เปลี่ยนชื่อใหม่เป็น Percona for MongoDB ตัวนี้มีจุดเด่นคือมี Percona เป็น Back ซึ่งเชี่ยวชาญด้านการ Modify Database ดังๆ มาปรับปรุงให้เทพขึ้น (เช่น MySQL ซึ่งผมใช้อยู่ และติดงอมแงม) และมี Tools ของตัวเองมาช่วยมากมายเช่น Tools ที่ช่วยเรื่อง Hot Backup และ Tools อื่นๆ ที่ช่วยให้ชีวิต DBA ง่ายขึ้นตามมา จุดเด่นอีกอย่างคือนอกจากจะมีทั้งการบีบอัดข้อมูล, Document Level Lock เหมือน WireTiger แล้วยังปรับปรุงเรื่องความเร็วหาก Data Set มีขนาดใหญ่กว่า Memory โดยจะยังรักษาความเร็วไว้ได้อย่างคงที่ เพราะใช้เทคโนโลยีส่วนตัวที่ชื่อว่า Fractal Tree ซึ่งผมเองเลือกใช้ตัวนี้ครับ สาเหตุหนึ่งเพราะผมเป็นติ่ง Percona มาตั้งแต่ MySQL แล้วด้วย 555
- RocksDB – Storage Engine น้องใหม่จาก Facebook เป็นการันตี สร้างขึ้นจาก LevelDB ซึ่งเป็นฐานข้อมูลแบบ key-value ที่ open source จาก Google ถ้า Download จาก website Percona ก็จะแถม Engine ตัวนี้มาให้เลือกเลยโดยไม่ต้อง setup เพิ่มเช่นกัน ใช้ LSM Tree ในการเก็บข้อมูล ทำให้ Write ได้เร็วกว่า PerconaFT เหมาะกับการเก็บ Log มาก แต่แลกกับการที่ Read ข้อมูลได้ช้ากว่า PerconaFT
หากใครมี use case แบบไหนก็เลือกใช้ให้เหมาะสมกับตัวเองนะครับ ขอให้โชคดี
อ้างอิงข้อมูล:
https://www.percona.com/blog/2015/12/23/percona-server-for-mongodb-storage-engines-in-iibench-insert-workload/
https://www.percona.com/blog/2016/01/06/mongodb-revs-you-up-what-storage-engine-is-right-part-1/
https://www.percona.com/blog/2016/01/11/mongodb-revs-you-up-what-storage-engine-is-right-for-you-part-2/
https://www.percona.com/blog/2016/01/20/mongodb-revs-you-up-what-storage-engine-is-right-for-you-part-3/
https://www.percona.com/blog/2016/01/27/mongodb-revs-you-up-what-storage-engine-is-right-for-you-part-4/
[UNITY][Facebook SDK] FB.Apprequest by tosawat
Mar0
วันนี้จะมาสังคายนา parameter ของ method FB.AppRequest นะครับ
หลังจากที่นั่งทำเรื่อง App Request บน UNITY อยู่หลายวัน ประสบปัญหา App Crash เมื่อกด Invite Friends ไปแล้ว วันนี้ก็เลยจะมา สังคายนา parameter ที่ถูกต้องของ method FB.AppRequest กันนะครับ
FB.AppRequest(“Message”, Selected, null, null, null, “Data”, “Title”, delegate (IAppRequestResult requestResult){});
- message
type: string
description: ข้อความที่จะส่งหาผู้เล่นคนอื่น - selected
type: null หรือ List<string>
description: List<string> ของ FBUID ของเพื่อน ที่ได้มาจาก me/invitable_friends ถ้าใส่ parameter นี้จะไม่มี UI Multi Friends Selector ของ Facebook ขึ้นมา แต่ถ้าใส่เป็น null จะมี UI Multi Friends Selector ของ Facebook ขึ้นมา ให้เลือกเพื่อนเพื่อส่ง Invite - filter
ใส่ null ไปซะ - excludeIds
ใส่ null ไปซะ - maxRecipients
ใส่ null ไปซะ - data
type: string
description: ข้อมูลที่จะได้กลับมากับ callback - title
type: string
description: หัวข้อที่จะขึ้นในหน้าเลือกเพือ่นของ Facebook Multi Friends Selector - callback
type: IAppRequestResult
description: method ที่จะถูกเรียกเมือทำงานเสร็จ
วิธีจัดหลายๆ GameObject และ Label ให้ชิดกันตรงกลาง by Ziah
Mar0
โดยปกติแล้วถ้าใช้ Anchor ธรรมดาๆ โดยมีตัวกลางเป็นตัวยึดก็จะพอทำได้ แต่ถ้าไม่มีของอยู่ตรงกลางเป้ะๆ หรือมีหนักไปทางใดทางนึงมากกว่า สิ่งที่จะใช้ได้ดีกว่าคือ Table นั่นเองครับ
รูปตัวอย่าง ผลลัพธ์ที่ต้องการ
ขั้นแรกเราก็สร้าง GameObject ที่มี UITable ก่อนเลย จัด Center ให้มันซะ
ส่วนตัวลูกๆใส้ใน UILabel ทุกอันให้ตั้งเป็น Resize Freely จะได้ขยับขยายได้ และอย่าใส่ Anchor!
เช่นเดียวกันกับ Widget อื่นๆที่อยู่ร่วมกันที่ต้องการจัดกลาง อย่าใส่ Anchor!
สุดท้าย อย่าลืม /*ชื่อ Table*/.Reposition(); ทุกครั้งที่มีการเปลี่ยนใส้ในไม่ว่าจะเปลี่ยนรูป เปลี่ยน Text ใน Label นะครับ
การสร้างสายรุ้งง่ายๆด้วย PS by Tae Romphopark
Mar0
การสร้างรุ้งสายรุ้งทำยังไง ไม่ยากมาลองทำกันครับ ^^
1.เตรียมภาพที่จะเอาสายรุ้งมาใส่หลังจากที่ทำเสร็จ(เราจะทำสายรุ้งแยกและมาประกอบทีหลัง)
2.หลังจากนั้น ctrl+n สร้างไฟล์งานใหม่ขนาด 600 x 600 px แล้วสร้าง layer ใหม่ใช้เครื่องมือ Rectangular Marquee Tool สร้าง Selection ตรงกลางภาพ
3.จากนั้นเลือก Gradient สีรุ้ง(1) และลากให้เป็นเส้นรุ้ง จากนั้นยกเลิก Selection(2)
4.จากนั้นใส่ Filter > Distort > Polar Coordinates จะได้แบบในภาพ (หากเล็กไปให้ Free Transform เอานะครับ(Ctrl + T)
5.เสร็จแล้วให้ลากสายรุ้งไปใส่ภาพที่เราเตรียมไว้ และจัดตำแหน่งตามความพอใจ
6.ที่รูปสายรุ้งให้เลือก Layer > Add Layer Mask > Reveal All จากนั้นไล่สีด้วย Gradient ขาว-ดำ ไปยังส่วนที่ Mask จะได้ตามภาพ
7.จากนั้นทำเบลอเพิ่มด้วย Filter > Blur > Gaussian Blur ใส่ค่าประมาณ 8 กด ok เป็นอันเสร็จแล้วครับ
ย้อมสีรถกันเถิด by Lynne
Mar0
1. เปิดรูปรถที่จะย้อมสีขึ้นมา
2. เปิดเลเยอร์ใหม่ ปาดสีที่ชอบลงไป อยากย้อมสีไร ปาดโล้ด
3. จากนั้นปรับเลเยอร์
จาก
Normor >> Hue
เอ็นเทอร์
โพ๊ะ
เปลี่ยนสีแล้วววววว ไม่ล้นด้วย ว้าวววว
ง่ายจริงๆเลย