AWS S3 — Performance Optimization
S3 ถูกออกแบบมาให้รองรับ high request rates โดยมี Limit อยู่ที่ requests/second
- >3,500 PUT/LIST/DELETE
- < 5,500 GET
แต่ถ้ามากกว่านี้เราเรียกว่า GET-Intensive Workloads ให้ใช้ CloudFront เพื่อให้ประสิทธิภาพที่ดีที่สุด แต่ๆ ถ้าเราจะ Performance Optimization ที่ไม่เกิน limit ดังข้างบน สิ่งที่เราต้องทําคือ หรือพวก Mixed-Workloads
- ทํา Sequential naming pattern ก่อนเข้าไปที่ Object เช่น ใช้ timestamp ก่อนเป็นที่ชื่อ file object
- ตั้ง Random Prefix สําหรับ Key names เพื่อลดการอ่าน object ทั้งหมดในนั้นทีเดียวให้อ่านทีละไฟล์นั้นเอง ไม่อย่างนั้นจะเกิด I/O issues ได้ (โดยตัวอย่างข้างนี้เป็นเรื่องของก่อนปี 2018 หมายถึงหลังจากนั้นแล้ว AWS S3 ได้ทําการ update ว่าไม่ต้อนใจเรื่องของ Naming Pattern โดยการ Random Prefix แล้ว เราสามารถใช้ sequential naming pattern ได้เลยแบบข้อ 1)
ดังตัวอย่างข้างล่างนี้
ถ้าลองมองดีๆในส่วนของ not optimal column นะ จะเห็นว่าเวลาที่เราเรียกไปที่ bucket นั้นๆ มันจะไปทําการหาไฟล์ทั้งหมด ภายใต้ 2020–03–04–08–00–00 เลย โดยไม่ได้เข้าไปที่ระดับ partition ของไฟล์นั้นจริงๆ ซึ่งจะทําให้เกิด I/O issues ได้ ถ้ามี object เยอะมากๆๆๆๆ