ระบบแนะนำกิจกรรม
การออกแบบธุรกิจ
- เพื่อออกแบบระบบแนะนำเหตุการณ์ส่วนบุคคลสำหรับการค้นหาเหตุการณ์
คำแนะนำทั่วไป
- ออกแบบบริการเว็บด้วย
RESTful APIs
ใน Java เพื่อจัดการคำขอและการตอบกลับ HTTP - ส่วนหน้า: หน้าเว็บเชิงโต้ตอบพร้อมเทคโนโลยี
AJAX
ที่ใช้งานกับ HTML
, CSS
และ JavaScript
เว็บไซต์แนะนำกิจกรรมตระหนักถึงหน้าที่หลักสามประการ:- ค้นหา กิจกรรมรอบตัวผู้ใช้
- กิจกรรม โปรด ที่พวกเขาชอบและลบกิจกรรมที่พวกเขาไม่ชอบอีกต่อไป
- รับคำ แนะนำเกี่ยวกับกิจกรรมต่างๆ โดยอิงตามประวัติที่พวกเขาชื่นชอบและระยะทางไปยังสถานที่ที่จะจัดกิจกรรม
- แบ็กเอนด์: ใช้
Java
เพื่อประมวลผลคำขอลอจิก และการสนับสนุนบางอย่างมีดังนี้:- สร้างด้วยทั้งฐานข้อมูลเชิงสัมพันธ์และฐานข้อมูล NoSQL (
MySQL
และ MongoDB
) เพื่อรองรับการจัดเก็บข้อมูลจากผู้ใช้และรายการที่ค้นหาใน TicketMaster API - ออกแบบ อัลกอริธึมการแนะนำตามเนื้อหา สำหรับการแนะนำกิจกรรม
- ปรับใช้เซิร์ฟเวอร์เว็บไซต์บน
Amazon EC2
: ระบบแนะนำกิจกรรม - วิเคราะห์การเข้าชมเว็บไซต์ทั้งออนไลน์และออฟไลน์ด้วย ELK (
ElasticSearch
, Logstash
และ Kibana
) และ MapReduce
ใน MongoDB
การออกแบบโครงสร้างพื้นฐาน
- สถาปัตยกรรม 3 ชั้น
- ระดับการนำเสนอ: HTML, CSS, JavaScript
- ชั้นข้อมูล: MySQL, MongoDB
- ระดับลอจิก: Java
- สภาพแวดล้อมการพัฒนาท้องถิ่นและระยะไกล
สภาพแวดล้อมการพัฒนาท้องถิ่น
สภาพแวดล้อมการพัฒนาระยะไกล
การออกแบบเอพีไอ
- ระดับลอจิก (Java Servlet ถึง RPC)
- ค้นหา
- รายการค้นหา
- API ของทิคมาสเตอร์
- แยกวิเคราะห์และล้างข้อมูล saveItems
- ตอบกลับ
- ประวัติศาสตร์
- รับ ตั้งค่า ลบรายการโปรด
- ฐานข้อมูลแบบสอบถาม
- ตอบกลับ
- คำแนะนำ
- แนะนำรายการ
- รับประวัติที่ชื่นชอบ
- ค้นหาเหตุการณ์ที่คล้ายกัน การเรียงลำดับ
- ตอบกลับ
- เข้าสู่ระบบ
- GET: ตรวจสอบว่าเซสชั่นเข้าสู่ระบบแล้วหรือไม่
- POST: ตรวจสอบชื่อผู้ใช้และรหัสผ่าน ตั้งเวลาเซสชัน และทำเครื่องหมายว่าเข้าสู่ระบบแล้ว
- สอบถามฐานข้อมูลเพื่อตรวจสอบ
- ตอบกลับ
- ออกจากระบบ
- GET: เซสชันไม่ถูกต้องหากมีอยู่และเปลี่ยนเส้นทางไปที่
index.html
- โพสต์: เช่นเดียวกับ GET
- ตอบกลับ
- ลงทะเบียน
- ตั้งค่าผู้ใช้ใหม่ลงในตาราง/คอลเลกชันผู้ใช้ในฐานข้อมูล
- ตอบกลับ
การออกแบบ API ในระดับลอจิก
- เอกสารอย่างเป็นทางการของ TicketMasterAPI - Discovery API
- การออกแบบอัลกอริธึมการแนะนำ
- การแนะนำตามเนื้อหา : ค้นหาหมวดหมู่จากโปรไฟล์รายการจากรายการโปรดของผู้ใช้ และแนะนำรายการที่คล้ายกันในหมวดหมู่เดียวกัน
- นำเสนอรายการแนะนำโดยจัดอันดับตามระยะทาง (ตำแหน่งทางภูมิศาสตร์ของผู้ใช้)
ขั้นตอนการขอคำแนะนำ
การออกแบบฐานข้อมูล
- MySQL
- ผู้ใช้ - เก็บข้อมูลผู้ใช้
- รายการ - เก็บข้อมูลรายการ
- หมวดหมู่ - ความสัมพันธ์ระหว่างรายการและหมวดหมู่ของร้านค้า
- ประวัติศาสตร์ - เก็บประวัติที่ผู้ใช้ชื่นชอบ
การออกแบบฐานข้อมูล MySQL
- MongoDB
- ผู้ใช้ - จัดเก็บข้อมูลผู้ใช้และประวัติรายการโปรด = (ผู้ใช้ + ประวัติ)
- รายการ - ข้อมูลรายการร้านค้าและความสัมพันธ์ของหมวดหมู่รายการ = (รายการ + หมวดหมู่)
- บันทึก - ข้อมูลบันทึกการจัดเก็บ
รายละเอียดการดำเนินการ
- รูปแบบการออกแบบ
- รูปแบบตัวสร้าง :
Item.java
- เมื่อแปลงเหตุการณ์จาก TicketMasterAPI เป็นรายการ java ให้ใช้รูปแบบตัวสร้างเพื่อเพิ่มฟิลด์ได้อย่างอิสระ
- รูปแบบโรงงาน :
ExternalAPIFactory.java
, DBConnectionFactory.java
-
ExternalAPIFactory.java
: รองรับฟังก์ชันที่หลากหลาย เช่น คำแนะนำกิจกรรม ร้านอาหาร ข่าวสาร งาน... เพียงลิงก์ไปยัง API สาธารณะต่างๆ เช่น TicketMasterAPI ปรับปรุงความสามารถในการขยาย -
DBConnectionFactory.java
: รองรับหลายฐานข้อมูลเช่น MySQL และ MongoDB ปรับปรุงความสามารถในการขยาย
- รูปแบบซิงเกิลตัน :
MySQLConnection.java
, MongoDBConnection.java
- สร้างเฉพาะอินสแตนซ์ของฐานข้อมูลตามจำนวนที่กำหนด และคลาสจะสามารถควบคุมอินสแตนซ์ได้เอง และให้สิทธิ์การเข้าถึงระดับโลกแก่คลาสภายนอก
การวิเคราะห์พฤติกรรมผู้ใช้
- ออนไลน์ ( ElasticSearch , Logstash , Kibana )
- ใช้ Logstash เพื่อดึงบันทึก (ในรูปแบบ NoSQL) จากนั้นจัดเก็บข้อมูลใน ElasticSearch สุดท้ายใช้ Kibana เพื่อวิเคราะห์ข้อมูลใน ElasticSearch รับตารางและกราฟบางอย่าง เช่น การใช้ API สถานะคำขอ ตำแหน่งทางภูมิศาสตร์ของผู้เยี่ยมชม ฯลฯ
สภาพแวดล้อมการพัฒนาระยะไกล
- ออฟไลน์ ( MapReduce ใน MongoDB )
- คัดลอกและวางบันทึกบางส่วนจากเซิร์ฟเวอร์ Tomcat
- ล้างข้อมูลบันทึกและจัดเก็บไว้ใน MongoDB
- ทำ
mapreduce()
ใน MongoDB - รับรายการการนับระยะเวลาตามลำดับการนับจากมากไปน้อย จากนั้นค้นหาเวลาสูงสุดที่มีการเข้าชมเว็บไซต์