ประสบการณ์ตอนทำงาน ตอน Purge data

Purge data มันคืออะไรหนอ

ตอนมาเริ่มทำงานใหม่ๆมักจะได้ยินคนอยู่ก่อนพูดถึงคำว่าจะ Purge เมื่อไหร่ ตอนนั้นด้วยความอ่อนด้อยก็งงว่า เฮ้ยเขาคุยอะไรกันวะ ชื่อยังกะหนังไล่ฆ่ากันวันเดียวงั้นแหละ อยู่ๆไปก็ได้เริ่มฟังคำนี้บ่อยขึ้นจนตอนได้รับงานเขียน Web application 1 ตัวมาดูแล เป็นระบบรับส่งข้อมูลธรรมดาแต่ประเด็นคือมันมีคำถามถึงที่หัวหน้าถามมาคือ รู้ไหมว่าต้อง Purge data เมื่อไหร่ ยังไง อ้าวชิบหาย ไม่มีคนบอกกูเลยก็เลยคอตกตอบไปว่า “เอ่อ Pure data มันคืออะไร” หัวหน้าผมก็ใจดีไม่โกรธก็อธิบายไปยาวๆว่ามันคืออะไร จากนี้ผมจะเล่าเรื่อง Purge data แบบมึนๆงงๆให้ฟังนะครับ

ระบบเก็บข้อมูลทุกวัน

เมื่อเรา On production แล้วระบบทำงานมีคนใช้งาน ระบบก็จะเก็บข้อมูลไปเรื่อยๆเกี่ยวกับกิจกรรมหลักของระบบ ถ้าระบบธนาคารก็พวกข้อมูลการฝากถอน โอนเงินต่างๆ ถ้าพวกระบบจัดการ stock ก็บันทึกว่าใครเอาของเข้าของออกจำนวนเท่าไหร่ตอนไหน ไอข้อมูลพวกนี้ศัพท์ในการทำงานเขาเรียกมันว่า Transaction (คนละ Transaction กับเรื่อง ACID ของ Database นะ) ไอข้อมูล Transaction พวกนี้มันจะโตไปเรื่อยๆ เรื่อยๆ เรื่อยๆ และ เรื่อยๆ จน

เวอร์เกินแล้วแค่เก็บข้อมูลเยอะๆมันจะทำให้ระบบมีปัญหาได้ไง จริงๆมันก็ทำให้เกิดได้นะครับ

  • เราไม่สามารถทำงานกับข้อมูลขนาดมหาศาลในงบประมาณจำกัด

ปกติเวลาบริษัทประมูลงานมาเขาก็ต้องกำหนด Space ของ Hardware software มาให้ ดังนั้นถ้าดันไม่กำหนดไว้ว่าจะทำงานกับข้อมูลขนาดเท่าไหร่ แสดงว่าเก็บเรื่อยๆๆๆจน Hard disk เต็มไงล่ะครับ

  • Performance

อะต่อให้มี Harddisk มีไม่จำกัดปัญหาต่อไปก็เรื่องปัญหาเรื่องประสิทธิภาพ ถ้าสมมุติมีข้อมูลขนาด 1 ล้านล้าน row แล้วเกิดอยากหาข้อมูล 1 row โดยหาโดย field ที่ไม่มี Index เพราะเหตุผลเพราะต้องการ Insert update ไวมากๆ (การทำ index จะทำ insert update delete ช้าลง) มันจะเกิดไรขึ้นก็คือ scan 1 ล้านล้าน row ใน Database สิครับ โอเคงั้นเปลี่ยนใหม่ ทำ Index สิครับ ทำแม่งไปเลยอย่าไปกลัว พอทำ Index ตอนข้อมูลเยอะๆ สิ่งที่จะเจอก็คือ นานโว้ยยยยยยยยยยย เคยมีคนในที่ทำงานรอการทำ Index ข้อมูลเป็นวันเลยนะ บางครั้งต้อง Down ระบบเพื่อทำ Index กันเลย บางทีการเลือกใช้ Index ไม่เหมาะสม พวก Index hash ถ้ามันมีข้อมูลเยอะๆ Hash มันจะชน สุดท้ายก็เข้าใกล้การ scan เหมือนกัน

ด้วยปัญหาเหล่านี้จึงทำให้มีข้อตกลงขึ้นมา

ข้อตกลงนี้คือเราตกลงกับลูกค้าว่า เฮ้ยจะเก็บข้อมูลพวก Transaction ไว้นานเท่าไหร่กันหนอ บางธุรกิจก็เก็บไว้ 6 เดือน บางธุรกิจ Transaction เยอะๆหน่อยก็ 3 เดือน อย่างธนาคารจะเก็บข้อมูลพวกข้อมูลฝากถอนไว้ 3 เดือน ถ้าใครไม่อัพสมุดเขาก็รวมเหลือ transaction เดียวให้เลยอันนี้ก็เป็นตัวอย่างที่ดี เดี๋ยวๆๆๆๆๆ อยู่ดีๆมาบอกว่าเกิดข้อตกลงไหนลองบอกข้อดีของการทำไอพวกนี้มาดิ ครับที่ผมคิดได้ก็มีประมาณนี้

  • ลด Cost

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

  • ไม่มีใครดึงข้อมูลเก่าๆมาดูเล่นหรอก

ก็เหมือนเรื่องที่เคยเขียนไปเกี่ยวกับการทำ Pagination ลองนึกธุรกิจนำเข้าส่งออก คือ เขาไม่หยิบข้อมูลเมื่อปีที่แล้วมาดูหรอก เอามาดูทำไม ครึ้มอกครึ้มใจอยากรู้ว่าเขาเอาอะไรเข้ามาเหรอ App นี้มันไว้นำเข้าส่งออกโว้ย App ไม่สนใจข้อมูลเมื่อปีที่แล้วหรอก มันสนแค่ว่าจะเอาของเข้าประเทศได้ไหม มีการแจ้งนำเข้ามาในระยะ 1 เดือนนี้ไหม แล้วมันแจ้งว่านำเข้าอะไรมา พอตรวจแล้วจริงไหม ส่วน APP ที่สนใจข้อมูลลเก่าๆคือพวก App ทำการวิเคราะห์ข้อมูล เพราะมันต้องการนำไปเข้า Algorithm ทางการวิเคราะห์ข้อมูลและหาความสัมพันธ์ ซึ่งเขาต้องการข้อมูลทั้งหมดไปวิเคราะห์ ดังนั้นแยกให้ออกนะว่า App ไหนต้องใช้ข้อมูลตั้งแต่บรรพกาล กับ App ไหนต้องการข้อมูลแค่ช่วงเวลาหนึ่งเท่านั้น พอเลยช่วงเวลาหนึ่งไปมันก็ไร้ประโยชน์

ตัวอย่างระบบที่ใช้ข้อมูลแค่ช่วงเวลาหนึ่งเท่านั้น

ระบบทะเบียนของนักศึกษามหาวิทยาลัยระบบพวกนี้จะเก็บข้อมูลที่เกี่ยวกับนักศึกษาที่กำลังเรียนอยู่เท่านั้น พอนักศึกษารุ่นนี้เรียนจบ เขาก็จะให้มันอยู่ในระบบอีกประมาณ 1 ปี พอหลังจากนั้นเขาก็จะ Purge data ของนักศึกษาที่จบแล้วพวกนี้ออกจากระบบ เพื่อให้ระบบเจอกับงานข้อมูลในระดับที่ตกลงกันไว้ (คงตกลงว่าระบบต้องทำงานได้กับจำนวนนักเรียน 4 ปี + 1 ปีที่จบไปแล้ว)

ที่พูดมาไม่ได้อธิบายเรื่อง Purge data เลย

ไอที่เล่ามาทั้งหมดไม่ใช่การ Purge data เลย แค่อยากเล่าที่มาของการ Purge แค่นั้น (เล่าเพื่อ เหมือนพาไปนั่งรถวนสามรอบแต่จุดหมายอยู่ตรงจุดเริ่มต้น) การ Purge data คือการเอาข้อมูลออกจากระบบนั่นแหละ (เรียกให้หรูเพื่ออะไร) โดยปกติเขาจะลบให้ข้อมูลคงเหลือตามที่ตกลงกันไว้กับลูกค้าเช่น เก็บข้อมูลไว้ในระบบแค่ 3 เดือนล่าสุด ส่วนข้อมูลมันจะไปไหนนั้นก็มีหลายแบบ บางงานที่เป็น Log ที่ไม่สำคัญก็ลบหายไปเลย บางงานข้อมูลสำคัญต้องใช้อ้างอิงกับศาลก็ต้องเก็บไว้นานหน่อยอาจเป็น 10 ปี - 20 ปีแล้วแต่กฏหมาย ไอพวกนี้ เขาก็ยจะ้ายมันไปเก็บไว้ที่อื่นที่ที่ใช้งบประมาณน้อยกว่าเช่น เอาไปเก็บไว้เป็นแผ่นเทป เวลาจะเอาค่อยไปเอาข้อมูลจากแผ่นเทปมา Restore กลับเพื่อเอาข้อมูลกลับมาห

ตัดจบละกัน

อันนี้ออกตัวก่อนว่าไม่รู้ที่เข้าใจมันถูกไหมนะ เพราะผมเข้าใจในที่ทำงานที่ผมทำอยู่ ไม่รู้ที่อื่นเขาหมายถึงอย่างงี้หรือเปล่า (แล้วจะมาเล่าทำพระแสงอะไร) แต่เท่าที่ลองหาข้อมูลเขาก็พูดแนวๆนี้นะ

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