การเลือกตั้งDB
การวิจัยและแรงจูงใจ
การระดมความคิดในช่วงแรกของเราทำให้ชัดเจนว่าไม่มีบริการมากนักที่จัดเก็บและนำเสนอข้อมูลการเลือกตั้งแก่ประชาชนทั่วไปและแม้แต่สำนักข่าว ด้วยโปรเจ็กต์นี้ เราต้องการเชื่อมช่องว่างนั้นด้วยการให้ข้อมูล เช่น ธุรกรรมของพรรคและประชากรผู้มีสิทธิเลือกตั้งขั้นสูง ซึ่งไม่ได้รายงานในสำนักข่าวใดๆ หรือจัดเก็บโดยฐานข้อมูลปัจจุบัน
ฐานข้อมูลปัจจุบัน เช่น http://www.indiavotes.com แม้ว่าจะแสดงผลหลังการเลือกตั้ง เช่น ผู้มีสิทธิเลือกตั้งและปิดการแข่งขัน แต่ก็ไม่สามารถให้ข้อมูลใดๆ ที่อาจช่วยทำนายการเลือกตั้งได้ ยิ่งไปกว่านั้น ยังไม่มีข้อมูลเกี่ยวกับเจ้าหน้าที่การเลือกตั้งหรือ EVM เราเชื่อว่าข้อมูลนี้มีความสำคัญอย่างยิ่งต่อการดำเนินการที่ราบรื่นของการเลือกตั้ง และได้รวมไว้ในโครงการของเราแล้ว เราหวังว่าโครงการของเราจะช่วยสร้างการเลือกตั้งที่มีข้อมูลครบถ้วนในเวลาต่อๆ ไป และด้วยการใช้โครงการของเรา ทุกคนจึงสามารถวิเคราะห์ตัวเลือกของตนได้ดียิ่งขึ้น
ภาพรวม
เราได้สร้างระบบฐานข้อมูลการเลือกตั้งของอินเดียซึ่งจัดเก็บข้อมูลเกี่ยวกับการเลือกตั้ง ผู้มีสิทธิเลือกตั้ง คณะกรรมการการเลือกตั้ง ผู้สมัคร และพรรคการเมือง ผู้ใช้สามารถเข้าถึงข้อมูลทั้งหมดที่ต้องการผ่านเว็บไซต์ของเรา
ข้อสันนิษฐาน: เราสามารถเข้าถึงข้อมูลทั้งหมดเกี่ยวกับพรรคการเมืองและการเลือกตั้ง
ผู้มีส่วนได้ส่วนเสียหลักของเรา ได้แก่ ผู้มีสิทธิเลือกตั้ง พรรคการเมือง สื่อ และนักวิจัยอิสระ
- สำหรับผู้มีสิทธิเลือกตั้ง คุณจะสามารถดูจำนวนเงินที่พรรคการเมืองใช้ไปกับการโฆษณาโดยใช้กราฟที่เข้าใจง่าย การเปรียบเทียบผู้สมัครทางการเมืองประเภทต่างๆ ในด้านการศึกษา ประวัติศาสตร์การเมือง และประวัติอาชญากรรม นอกจากนี้การแบ่งรายจ่ายพรรคการเมืองจะช่วยในการติดตามการใช้เงินภาษีและทำให้การใช้เงินในทางที่ผิดเป็นที่สนใจของสาธารณชน
- สำหรับพรรคการเมือง คุณจะได้รับข้อมูลประชากรของผู้มีสิทธิเลือกตั้งในทุกเขตตามสายต่างๆ นอกจากนี้ยังสามารถเข้าถึงข้อมูลเกี่ยวกับผู้สมัครของฝ่ายอื่น ๆ และสามารถวางกลยุทธ์ผู้สมัครได้ตามนั้น
- สำหรับสื่อและนักวิจัยอิสระ คุณสามารถรวมข้อมูลทั้งของผู้มีสิทธิเลือกตั้งและพรรคเพื่อวิเคราะห์ว่าทำไมพรรคการเมืองจึงสามารถชนะเขตใดเขตหนึ่งได้ นอกจากนี้ การวิเคราะห์ข้อมูลเพิ่มเติมจะทำให้คุณให้ข้อมูลเชิงลึกเกี่ยวกับแนวโน้มการลงคะแนนได้ดียิ่งขึ้น ข้อมูลค่าใช้จ่ายของพรรคและประวัติผู้สมัครยังมีประโยชน์สำหรับหน่วยงาน/บุคคลเหล่านี้ด้วย
- สำหรับคณะกรรมการการเลือกตั้ง บันทึกของเจ้าหน้าที่ทั้งหมดที่เกี่ยวข้องกับกระบวนการเลือกตั้งจะช่วยให้การบริหารงานง่ายขึ้น และยังจะปรับปรุงกระบวนการจัดสรรเจ้าหน้าที่ไปยังแต่ละเขตให้มีประสิทธิภาพยิ่งขึ้นอีกด้วย นอกจากนี้ ข้อมูล EVM ยังมีประโยชน์ในการค้นหาและเปลี่ยนเครื่องจักรที่ชำรุดอีกด้วย
การออกแบบทางเทคนิค
แบ็กเอนด์
เราตัดสินใจใช้ Django Framework ในแอปของเราเนื่องจากเป็นเฟรมเวิร์กเว็บที่ใช้ Python และเป็นไปตามรูปแบบสถาปัตยกรรมมุมมองโมเดล เทมเพลต ซึ่งทำให้สามารถปรับขนาดได้สูง
ปัญหาหลักที่เราพบ/คาดการณ์ในระหว่างโครงการของเราในส่วนแบ็กเอนด์คือ:
- วิธีควบคุมคำขออัปเดตหลายรายการไปยังฐานข้อมูลพร้อมกัน - ด้วยเหตุนี้เราจึงตัดสินใจใช้การล็อคในเซิร์ฟเวอร์ของเรา เมื่อเธรดได้รับการล็อคแล้ว ความพยายามในการล็อคครั้งต่อไปทั้งหมดจะถูกบล็อกจนกว่าจะถูกปลดล็อค และจำเป็นที่เธรดจะต้องได้รับการล็อคก่อนดำเนินการสืบค้นไปยังฐานข้อมูล ดังนั้นการล็อคทำให้มั่นใจได้ว่าลูกค้าเพียงรายเดียวเท่านั้นที่สามารถอัปเดตฐานข้อมูลได้ในแต่ละครั้ง
- มีการสอบถามหลายรายการพร้อมกัน - เพื่อแก้ไขปัญหานี้ เราจึงตัดสินใจดำเนินการตามคำขอของลูกค้าแต่ละรายในชุดข้อความใหม่ ซึ่งช่วยให้เราตอบกลับได้เร็วขึ้น เนื่องจากคำขอของลูกค้าไม่จำเป็นต้องรอให้คำขออื่นเสร็จสิ้น เราสังเกตเห็นว่าการใช้เธรดสำหรับทุกคำขอลดลงอย่างมาก
- สถานการณ์การสูญเสียการเชื่อมต่อกับฐานข้อมูล - เราคาดว่าจะมีความเป็นไปได้ค่อนข้างมากที่การเชื่อมต่อกับฐานข้อมูลจะขาดหายไป และด้วยเหตุนี้ จึงทำให้ตารางบันทึกในเซิร์ฟเวอร์ของเราเก็บรายการของเซิร์ฟเวอร์ธุรกรรมแต่ละรายการที่ทำกับฐานข้อมูล
- การสร้างหน่วยความจำแคชในเซิร์ฟเวอร์ - เนื่องจากฐานข้อมูลได้รับการอัปเดตอย่างต่อเนื่อง เราจึงต้องมอบค่าที่อัปเดตให้กับลูกค้าทุกครั้งที่มีการอัพเดตค่า ด้วยเหตุนี้เราจึงตัดสินใจสร้างหน่วยความจำแคชที่จะได้รับการอัพเดตทุกครั้งที่มีคนอัพเดตฐานข้อมูล นอกจากนี้ยังช่วยประหยัดค่าใช้จ่ายในการส่งแบบสอบถามไปยังฐานข้อมูลสำหรับผู้ใช้แต่ละราย เนื่องจากมีการจัดส่งแคชที่อัปเดตนี้และมีคำขอเดียวเท่านั้นที่เพียงพอสำหรับผู้ใช้ทั้งหมด
ส่วนหน้า
เราใช้ VanillaJS กับ HTML และ CSS เพื่อสร้างส่วนหน้า
ปัญหาหลักที่เราพบ/คาดการณ์ในระหว่างโครงการของเราในส่วนแบ็กเอนด์คือ:
- การอัปเดตกราฟและตารางแบบไดนามิกบนหน้าเว็บ - เราคาดว่าฐานข้อมูลอาจได้รับการอัปเดตโดยผู้ใช้รายอื่นในขณะที่มีคนท่องเว็บไซต์ของเรา และจะเป็นไปไม่ได้ที่ผู้ใช้จะรีเฟรชหน้าเว็บต่อไปเพื่อรับการอัปเดต ดังนั้น เพื่อแก้ไขปัญหานี้ เราจึงตัดสินใจใช้ฟังก์ชัน AJAX เพื่ออัปเดตแผนภูมิและตารางแบบไดนามิกสำหรับผู้ใช้ โดยไม่จำเป็นต้องรีเฟรชหน้าเว็บ นอกจากนี้ยังมีประสิทธิภาพสูงเนื่องจากดึงข้อมูลจากหน่วยความจำแคชจากเซิร์ฟเวอร์และไม่จำเป็นต้องส่งแบบสอบถามไปยังฐานข้อมูล
ฐานข้อมูล
เราได้สร้างตารางสำหรับผู้มีส่วนได้ส่วนเสียแต่ละรายเพื่อจัดเก็บรายละเอียดและตารางสองสามตารางเพื่อสร้างความสัมพันธ์ระหว่างพวกเขา สำหรับตารางที่มีข้อมูลขนาดใหญ่ เช่น ผู้ลงคะแนนเสียง เราได้สร้างตารางดัชนีเพื่อให้เราสามารถเข้าถึงข้อมูลได้อย่างรวดเร็ว นอกจากนี้เรายังได้ทำให้ฐานข้อมูลเป็นมาตรฐานเพื่อให้ง่ายต่อการเข้าใจและมีประสิทธิภาพในการอัปเดตมากขึ้น
ฐานข้อมูลถูกเผยแพร่ใน Microsoft Azure Servers และสามารถเข้าถึงได้โดยใช้ซอฟต์แวร์การจัดการเซิร์ฟเวอร์ Microsoft SQL
เอกสารประกอบ
ผู้ใช้ต้องทำสิ่งต่อไปนี้เพื่อรันโปรเจ็กต์นี้:
- เนื่องจากโปรเจ็กต์นี้ถูกนำไปใช้ใน Django Framework ผู้ใช้จึงต้องติดตั้ง Django ในเครื่องของเขา จากนั้นไปที่ไดเร็กทอรีโปรเจ็กต์ DBMS_PROJECT/django_project
- หลังจากเปิดไดเร็กทอรีนี้ ผู้ใช้จะต้องรันคำสั่งต่อไปนี้:
python manage . py runserver
- หลังจากนี้ผู้ใช้สามารถเห็นบรรทัดต่อไปนี้:
You have 17 unapplied migration ( s ). Your project may not work properly until you apply the migrations for app ( s ): admin , auth , content types , sessions .
Run 'python manage.py migrate' to apply them .
April 30 , 2020 - 14 : 41 : 47
Django version 3.0 . 5 , using settings 'django_project.settings'
Starting development server at http : // 127.0 . 0.1 : 8000 /
Quit the server with CTRL - BREAK .
- เปิดลิงก์ localhost โปรเจ็กต์จะเปิดขึ้นในเบราว์เซอร์
การดำเนินการโบนัส
เราได้สร้างการเลือกตั้งเสมือนจริงซึ่งช่วยให้เราสามารถประเมินผลการเลือกตั้งก่อนผลการเลือกตั้งจริงได้ ผู้ใช้เข้าสู่ระบบเว็บไซต์ของเราและเลือกผู้สมัคร เมื่อเสร็จแล้วเขาจะไม่ได้รับอนุญาตให้ลงคะแนนอีกครั้ง วิธีนี้เราจะสร้างตารางที่มีรายละเอียดผู้มีสิทธิ์ลงคะแนนและการลงคะแนนของเขา และหลังจากเวลาที่กำหนด เราจะประกาศผลลัพธ์โดยประมาณแก่ผู้ใช้ของเรา
วิธีนี้จะทำให้ผู้ใช้ของเราได้รับผลลัพธ์ก่อนที่จะเริ่มนับคะแนนจริง
เราสร้างบริการที่มีประสิทธิภาพสูงในการติดตามธุรกรรม ดูแลรักษาหน่วยความจำแคช ล็อคการทำงานพร้อมกัน และให้ผลลัพธ์ที่รวดเร็วโดยใช้มัลติเธรด รายละเอียดระบุไว้ในการออกแบบทางเทคนิค
เราสร้างหน้าเว็บที่มีประสิทธิภาพสูงซึ่งช่วยให้ผู้ใช้สามารถรับข้อมูลที่อัปเดตได้โดยไม่ต้องรีเฟรชหน้าเว็บด้วยซ้ำ รายละเอียดระบุไว้ในการออกแบบทางเทคนิค
แผนภาพเอ้อ
ลิงค์: https://app.creately.com/diagram/knHC7u2yS86/
ผู้ร่วมให้ข้อมูล
- ภาไว อัครวาล 2018384
- ดิปตันชู มิตทัล 2018232
- มนัส 2018244
- ริชาร์บ ชอฮาน 2018256