พื้นหลัง
ฉันกำลังทำงานกับแอพสำหรับลูกค้าที่มีคุณสมบัติเครือข่ายสังคมบางอย่าง ตอนแรกฉันพัฒนามือถือส่วนหน้า แต่สถานการณ์ก็ทำให้ฉันต้องรับผิดชอบด้านการพัฒนาด้านหลังเช่นกัน
ในฐานะที่เป็นพื้นหลังทั่วไประบบของเราอนุญาตให้ผู้ใช้ติดตามผู้ใช้รายอื่นและรับการแจ้งเตือนเกี่ยวกับสิ่งที่พวกเขากำลังติดตามดังที่คุณคาดหวังจากเครือข่ายสังคมออนไลน์ ข้อแม้คือว่าจะมีเพียงผู้ใช้ชุดย่อยขนาดเล็ก (อย่างน้อยไม่กี่ร้อย) โดยมีความคาดหวังว่าฐานผู้ใช้ส่วนใหญ่จะติดตามบุคคลเหล่านี้อย่างน้อยหนึ่งคน
ทางด้าน UI เราจะมีปุ่มแจ้งเตือนพร้อมตัวเลขและการคลิกปุ่มจะนำคุณไปยังหน้าจอการแจ้งเตือน
ปัญหา
ฉันค้นคว้ากลยุทธ์ในการใช้งานการแจ้งเตือนและทรัพยากรส่วนใหญ่ที่ฉันพบพบว่าสร้างตารางการแจ้งเตือนหนึ่งตารางขึ้นไปในฐานข้อมูล (ตัวอย่างที่ฉันชอบคือคำตอบที่ยอมรับได้ที่นี่: /programming/9735578/building-a-notification-system )
สิ่งที่ทิ้งฉันไปคือกลยุทธ์การขับเคลื่อนฐานข้อมูลส่วนใหญ่สำหรับการแจ้งเตือนจำเป็นต้องแทรกแถวสำหรับการแจ้งเตือนแต่ละรายการสำหรับผู้ติดตามแต่ละคน ดังนั้นหากคนนับพันติดตามแซลลี่เราจะแทรกหนึ่งพันแถวลงในตารางที่เกี่ยวข้อง ปรับขนาดได้หรือไม่ จะเกิดอะไรขึ้นถ้าเราไปถึงจุดที่ผู้ใช้หลายสิบหรือหลายแสนคนติดตาม Sally และเธอกำลังโพสต์ไม่กี่โหลต่อวัน
แนวคิดดั้งเดิมของฉันคือการจัดการทุกอย่างด้วยข้อความค้นหา: หมายเลขบนปุ่มแจ้งเตือนจะได้รับโดยขอจำนวนแถวของเนื้อหาที่โพสต์เร็วกว่าครั้งล่าสุดที่คุณเยี่ยมชมหน้าจอการแจ้งเตือนในขณะที่การแจ้งเตือนแต่ละรายการจะถูกสร้างขึ้น เมื่อคุณเยี่ยมชมหน้าจอการแจ้งเตือน วิธีนี้จะไม่ต้องมีการเขียนหรือการเก็บข้อมูลเพิ่มเติม แต่ยืดหยุ่นและอาจค้อนเซิร์ฟเวอร์ค่อนข้างยาก
ติดตั้ง
แบ็กเอนด์ (ตามที่กำหนดโดยผู้พัฒนาก่อนหน้านี้) ใช้CodeIgniterและฐานข้อมูลMySQL ขณะนี้กำลังทำงานบนบัญชีโฮสติ้งที่ใช้ร่วมกันแบบเส็งเคร็ง GoDaddy แต่ฉันคิดว่า (หวังว่า) สิ่งนี้จะได้รับการอัปเกรดก่อนที่เราจะเข้าสู่การผลิตและแพ็คเกจโฮสติ้งจะถูกปรับสัดส่วนตามการเติบโตของผู้ใช้
ปัจจุบันส่วนหน้าของเราคือแอพมือถือ แต่เราวางแผนที่จะสร้างเว็บไซต์ในภายหลัง ฉันไม่ได้กังวลเกี่ยวกับการได้รับการอัพเดตแบบพุชแบบเรียลไทม์จากเซิร์ฟเวอร์เกี่ยวกับการแจ้งเตือน
ภาคผนวก
ฉันไม่เชี่ยวชาญในแบ็กเอนด์และฉันอยู่ในหัวของฉันในแผนกนั้น ลูกค้ารู้และฉันพยายามอย่างเต็มที่ที่จะอธิบายขอบเขตของโครงการในลักษณะนี้ แต่พวกเขาทำให้มันชัดเจนว่า ณ จุดนี้พวกเขาจะไม่ไว้ใจคนอื่นให้ทำงานในโครงการ เราอาจมีงานอีกเดือนที่ต้องทำก่อนที่จะเริ่มเพิ่มผู้ทดสอบและฉันจะได้รับการวัดประสิทธิภาพใด ๆ ฉันไม่สามารถประมาณจำนวนผู้ใช้ที่เราอาจมีหรือฮาร์ดแวร์ที่เราอาจจะเปิดตัวในอีก 5 ปีข้างหน้า แต่ฉันคิดว่าลูกค้าหวังว่าจะมีผู้ใช้หลายแสนคนขึ้นไป
ฉันหวังว่านี่เป็นปัญหาเฉพาะที่ควรโพสต์ที่นี่ ฉันสามารถปรับแต่งได้ถ้าจำเป็นต้องเป็น โปรดถามว่าคุณมีคำถามใด ๆ หรือฉันไม่ได้ระบุรายละเอียดที่สำคัญ
TL; DR
- ระบบการแจ้งเตือนที่ใช้ฐานข้อมูลมีผลกระทบเชิงลบต่อความสามารถในการขยายระบบในระยะยาวหรือไม่เมื่อผู้ใช้ทั้งหมดติดตามเพียงไม่กี่ร้อยคน
- มีวิธีสร้างฐานข้อมูลการแจ้งเตือนโดยไม่ต้องการแถวการแจ้งเตือนแยกต่างหากสำหรับแต่ละการแจ้งเตือนสำหรับผู้ติดตามแต่ละคนหรือไม่
- ระบบการแจ้งเตือนจากข้อความค้นหาทั้งหมดสามารถปรับขนาดได้หรือมีข้อได้เปรียบนอกเหนือจากการไม่เขียนข้อมูลใด ๆ ไปยังฐานข้อมูลหรือไม่
- ฉันคิดอย่างนี้เร็วเกินไปไหม ฉันควรจะสร้างบางสิ่งที่ใช้งานได้ในตอนนี้และเราสามารถกังวลเกี่ยวกับการปรับให้เหมาะสมถ้าเป็นปัญหาเนื่องจากลูกค้ามีงบประมาณ จำกัด และเรายังไม่รู้ว่าผลิตภัณฑ์สุดท้ายจะได้รับความนิยมหรือไม่