ฉันเพิ่งเห็นแนวคิดบางอย่างเกี่ยวกับตะกร้าสินค้าจากเพื่อนร่วมชั้น Wu Lei ฉันคุ้นเคยกับแง่มุมนี้ของอีคอมเมิร์ซ ฉันจึงกระโดดออกมาอวดความอับอายของตัวเอง หวังว่ามันจะเป็นประโยชน์กับเพื่อนร่วมงานบ้าง ตอนแรกฉันอยากจะตอบข้อความต่อไปนี้ แต่กลับกลายเป็นว่าต้องใช้เวลาเขียนมาก ดังนั้นฉันก็อาจจะเขียนไว้ที่นี่เช่นกัน มันจะง่ายกว่าที่จะค้นหาด้วยตัวเองในอนาคต คำถาม: 1. ข้อมูลในตะกร้าสินค้าควรเก็บไว้ในฐานข้อมูลหรือไม่
ฉันต้องการทราบเป็นพิเศษว่าวิศวกรซอฟต์แวร์ตัวจริงคิดอย่างไรเกี่ยวกับปัญหานี้ในโครงการจริง หลังจากค้นหาใน Google ฉันพบบทความจากชาวเน็ตในสวนของเรา: ตะกร้าสินค้าควรเป็นโมดูลสำหรับจัดเก็บข้อมูลชั่วคราวและเก็บไว้ในวัตถุเซสชัน สิ่งที่ชาวเน็ตพูดก็สมเหตุสมผล แต่ฉันไม่ชอบวิธีนี้ หากทุกคนจัดเก็บไว้ในออบเจ็กต์ Session และผู้ใช้หลายพันรายซื้อสินค้าร่วมกัน เซิร์ฟเวอร์ ASP.NET จะรับภาระงานมหาศาลอย่างแน่นอน บางทีเว็บไซต์ในประเทศของเราอาจจะดีกว่า แต่เราจะทำอย่างไรกับเว็บไซต์อย่าง Amazon ล่ะ? เว็บไซต์ Amazon China ซึ่งเป็นเว็บไซต์ของ Joyo ไม่ได้จัดเก็บไว้ในออบเจ็กต์ Session เพราะหากฉันไม่ส่งคำสั่งซื้อสินค้าที่ฉันใส่ลงในตะกร้าสินค้าในครั้งนี้ สินค้าเหล่านี้จะยังคงอยู่ในตะกร้าสินค้าหลังจากเข้าสู่ระบบแล้ว ในครั้งต่อไป ดังนั้นฉันจึงคิดว่าพวกเขาอาจจะนำข้อมูลจากตะกร้าสินค้าเหล่านั้นไปไว้ในฐานข้อมูล
ตอบ: ดูเหมือนว่าการจัดเก็บตะกร้าสินค้าใน Session จะมีเฉพาะในการออกแบบหลักสูตรในมหาวิทยาลัยหรือในโครงการฝึกงานบางโครงการที่ไม่มีใครสนใจเท่านั้น ในความเป็นจริง เว็บไซต์อีคอมเมิร์ซเกือบทั้งหมดจะจัดเก็บข้อมูลตะกร้าสินค้าไว้ในฐานข้อมูล ต่อไปนี้เป็นคำอธิบายและข้อควรพิจารณาในการออกแบบ:
1. เซสชันไม่เหมาะสำหรับการจัดเก็บข้อมูลจำนวนมาก เมื่อมีผู้ใช้จำนวนมากย่อมส่งผลต่อประสิทธิภาพของเซิร์ฟเวอร์อย่างหลีกเลี่ยงไม่ได้ ซึ่งควรหลีกเลี่ยง
2. มีปัญหาการสูญเสียเซสชันโดยไม่ตั้งใจ หรือเมื่อผู้ใช้ปิดเบราว์เซอร์โดยไม่ตั้งใจ รายการทั้งหมดในตะกร้าสินค้าจะหายไป ส่งผลให้ผู้ใช้ได้รับประสบการณ์ที่แย่มาก
3. คุกกี้สามารถแก้ปัญหาเซสชันได้ในรายการด้านบน แต่เนื่องจากคุกกี้มีความยาวจำกัด ค่าใช้จ่ายในการสื่อสารเมื่อใช้คุกกี้ และข้อควรพิจารณาด้านความปลอดภัย คุกกี้จึงไม่เหมาะสำหรับรถเข็นช็อปปิ้ง
4. ประสบการณ์การใช้งานที่ดีขึ้นคือสามารถบันทึกสถานะตะกร้าสินค้าได้ภายในระยะเวลาหนึ่ง ไม่ว่าผู้ใช้จะเข้าสู่ระบบหรือไม่ก็ตาม ซึ่งกำหนดให้ตะกร้าสินค้าในฐานข้อมูลไม่สามารถเชื่อมโยงกับผู้ใช้ได้
5. สินค้าที่วางในตะกร้าสินค้าโดยทั่วไปเป็นสินค้าที่มีจุดประสงค์ในการซื้อ แต่อาจไม่จำเป็นต้องกลายเป็นคำสั่งซื้อจริง ในขณะนี้ การรักษาข้อมูลนี้มีบทบาทสำคัญในการขุดข้อมูลและการวิเคราะห์ธุรกิจ
คำถาม: 2. เกี่ยวกับการทำงานพร้อมกัน?
ปรากฎว่าตอนที่ฉันกำลังพัฒนาเว็บไซต์จำลองของตัวเอง ฉันเคยนึกถึงคำถามนี้: หากลูกค้าใส่หนังสือบางเล่มลงในตะกร้าสินค้าบนเว็บไซต์ จำนวนหนังสือเหล่านี้ควรถูกลบออกจากสินค้าคงคลังหรือไม่ นั่นคือสิ่งที่ฉันทำ ฉันลบจำนวนหนังสือที่เกี่ยวข้องในตะกร้าสินค้าออกจากฐานข้อมูลเพื่อป้องกันไม่ให้ผู้ใช้รายอื่นเห็นจำนวนสินค้าคงคลังที่เป็นเท็จในขณะนี้ (หากไม่ลบออก ผู้ใช้รายอื่นก็สามารถซื้อได้ ตัวอย่างเช่น จำนวนหนังสือใน สินค้าคงคลังคือ 10 หนังสือเล่มนี้ ลูกค้า A ใส่สำเนา 10 เล่มลงในตะกร้าสินค้าของเขา และลูกค้า B ก็ใส่สำเนา 10 เล่มลงในตะกร้าสินค้าของเขาด้วย ดังนั้นใครจะซื้อหนังสือเล่มนี้จะกลายเป็นข้อขัดแย้ง) แต่ผลที่ผมทำคือทุกครั้งที่ลูกค้าอัพเดทตะกร้าสินค้าจะมีการสื่อสารกับฐานข้อมูล ทำให้ภาระบนดาต้าเซิร์ฟเวอร์เพิ่มมากขึ้น Amazon.cn ทำงานได้ไม่ดีนักในเรื่องนี้ เมื่อไม่กี่วันก่อน ฉันเชื่อว่าคุณอาจประสบปัญหาที่เมื่อคุณซื้อหนังสือ "ความเข้าใจเชิงลึกเกี่ยวกับระบบปฏิบัติการ" คุณได้ส่งคำสั่งซื้อแต่แรกได้รับแจ้ง ว่าของหมดในวันรุ่งขึ้น เหตุการณ์นี้ส่งผลกระทบอย่างมากต่อความน่าเชื่อถือของ Amazon.cn ฉันไม่รู้ว่าระบบของพวกเขาได้แก้ไขปัญหานี้แล้วหรือยัง แต่ราคาของ Joyo ของหนังสือ "ความเข้าใจในเชิงลึกเกี่ยวกับระบบปฏิบัติการ" ไม่ใช่สิ่งที่เคยเป็น . ฉันไม่รู้ว่าผู้เชี่ยวชาญแก้ไขปัญหานี้ได้อย่างไร คุณสามารถเขียนประสบการณ์ความสำเร็จของคุณในความคิดเห็นได้
ตอบ: ก่อนอื่น เรามาพูดถึงภาระบนเซิร์ฟเวอร์ฐานข้อมูลกันก่อน ลองนึกถึงจำนวนครั้งที่ต้องเข้าถึงฐานข้อมูลทุกครั้งที่มีการเข้าถึงเพจ แล้วลองคิดดูว่าจะต้องใช้กี่ครั้งในการแลกเปลี่ยนสำหรับการดำเนินการเพิ่มหนึ่งครั้ง ตะกร้าสินค้า (จำนวนการเข้าถึงส่วนใหญ่ขึ้นอยู่กับความง่ายในการใช้งานของเว็บไซต์) การออกแบบนี่เป็นอีกหัวข้อหนึ่ง) ดังนั้นแม้ว่าการปรับเปลี่ยนการออกแบบที่นี่สามารถลดความกดดันของฐานข้อมูลได้ แต่ก็ไม่ใช่ปัญหาคอขวดที่นี่ ไม่จำเป็นต้องใส่ใจมากเกินไปที่นี่
เป็นวิธีปฏิบัติทั่วไปในปัจจุบันที่สินค้าในตะกร้าสินค้าจะไม่ถูกหักออกจากสินค้าคงคลังโดยทันที โดยมีจุดประสงค์หลักเพื่อป้องกันไม่ให้ผู้อื่นครอบครองสินค้าผ่านตะกร้าสินค้าอย่างมีเจตนาร้าย นอกจากนี้ โดยทั่วไปแล้วจะมีการให้จำนวนเงินที่ซ้ำซ้อน ของสินค้าในตะกร้าสินค้าจะไม่ถูกหักออกจากสต็อกทันที การเข้าสู่คำสั่งซื้อที่สำเร็จขั้นสุดท้ายไม่อนุญาตให้ส่งผลกระทบต่อยอดขาย โดยทั่วไปสินค้าคงคลังจะถูกหักออกเมื่อส่งคำสั่งซื้อสำเร็จ นั่นคือเมื่อผู้ใช้ส่งคำสั่งซื้อ คุณจะมีโอกาสเตือนผู้ใช้อีกครั้งว่าไม่มีสินค้าคงคลัง ดังนั้นจึงไม่จำเป็นต้องหักสินค้าคงคลังเมื่อทำการสั่งซื้อใน ตะกร้าสินค้า สำหรับคำสั่งซื้อที่ประสบความสำเร็จ ไม่ใช่ทุกคำสั่งซื้อที่ส่งโดยผู้ใช้จะถือว่าคำสั่งซื้อที่ประสบความสำเร็จ มีกระบวนการตรวจสอบคำสั่งซื้ออัตโนมัติ โปรแกรมนี้เขียนได้ยาก แต่มีความสำคัญมากโดยพิจารณาจากการวิเคราะห์ข้อมูลก่อนหน้านี้ พฤติกรรมผู้ใช้ ชื่อเสียงของผู้ใช้ ฯลฯ ข้อมูลมาจากระบบที่จะตรวจสอบคำสั่งซื้อให้เสร็จสิ้นโดยอัตโนมัติภายในไม่กี่นาที ความเข้มข้นของการตรวจสอบนั้นเกี่ยวข้องกับอุตสาหกรรม ซึ่งสามารถกำจัดคำสั่งซื้อปลอมส่วนใหญ่ได้ และบางส่วนอาจถูกถ่ายโอนไปยังการตรวจสอบด้วยตนเอง ระบบตรวจสอบอัตโนมัติ
มีสถานการณ์พิเศษที่นี่ สำหรับผลิตภัณฑ์พิเศษบางอย่าง เช่น บัตรคอนเสิร์ต อาจมีการเลือกที่นั่งออนไลน์ ในกรณีนี้ การสำรองที่นั่งหลังจากวางตะกร้าสินค้าจะมีประโยชน์มากกว่า ทันทีหลังจากวางตะกร้าสินค้า แต่จะถูกปล่อยโดยอัตโนมัติหากไม่กลายเป็นคำสั่งซื้อจริงภายในระยะเวลาหนึ่ง เช่น สิบนาที แม้ว่าจะไม่สามารถกำจัดการยึดครองที่นั่งที่เป็นอันตรายได้อย่างสมบูรณ์ แต่ก็สามารถแก้ไขปัญหาส่วนใหญ่ได้ ในปัจจุบัน คำสั่งซื้อที่ประสบความสำเร็จในการจองตั๋วแตกต่างจากอุตสาหกรรมอื่นๆ ส่วนใหญ่ เกณฑ์ในการตัดสินคำสั่งซื้อที่นั่งออนไลน์ที่ประสบความสำเร็จในอุตสาหกรรมการออกตั๋วคือการชำระเงินสำเร็จหรือไม่ ซึ่งหมายความว่าคุณสามารถจองได้เพียงสิบนาทีเว้นแต่คุณจะชำระเงิน
คำถาม: 3. ความสัมพันธ์ระหว่างคำสั่งซื้อและรายละเอียดคำสั่งซื้อกับตะกร้าสินค้า
ฉันคิดว่าปัญหานี้อาจเป็นปัญหาใหญ่สำหรับเว็บไซต์ดังกล่าวมาโดยตลอด! เมื่อสองวันก่อน ครูเฉินจาก CSTP สัมภาษณ์ฉันทางโทรศัพท์เกี่ยวกับคำถามนี้ ตอนนั้นฉันกังวลมาก และคำตอบของฉันก็ไม่ค่อยชัดเจน ในความเป็นจริง ปัญหานี้ไม่ใช่เรื่องยากที่จะคิดง่ายๆ: มีสองตาราง คำสั่งซื้อ และรายละเอียด แต่ละคอลัมน์ในตารางลำดับจะชี้ไปที่คอลัมน์ที่เกี่ยวข้องในตารางรายละเอียด Foreign Key คือหมายเลขคำสั่งซื้อในตารางคำสั่งซื้อ
ตอบกลับ: คำถามนี้ค่อนข้างง่าย วิธีหนึ่งคือใส่ลงในตะกร้าสินค้าและถือเป็นคำสั่งซื้อ ในสถานะนี้ คำสั่งซื้อสามารถแก้ไขได้และรวมตะกร้าสินค้าเข้ากับระบบการสั่งซื้อ ( ให้ความสนใจกับการจัดการสถานะการเข้าสู่ระบบของผู้ใช้และไม่ได้เข้าสู่ระบบ) อย่างที่สองคือการมีตารางตะกร้าสินค้าแยกต่างหาก เมื่อส่งคำสั่งซื้อในที่สุด ข้อมูลในตะกร้าสินค้าจะถูกคัดลอกลงในตารางคำสั่งซื้อและรายละเอียดคำสั่งซื้อ อย่างหลังมีการใช้กันทั่วไปมากกว่า และตัวเลือกเฉพาะนั้นขึ้นอยู่กับคุณลักษณะของอุตสาหกรรมและผลิตภัณฑ์
คำถาม: 4. จะสร้างหมายเลขคำสั่งซื้อในรายการโดยละเอียดได้อย่างไร?
คำถามนี้สืบทอดมาจากคำถามที่ 3 ฉันยังไม่ทราบวิธีแก้ปัญหานี้ ฉันมีสองวิธีแก้ปัญหา วิธีหนึ่งคือการใช้ทริกเกอร์ และอีกวิธีคือการเขียนโปรแกรม แบบแรกจะเพิ่มรายละเอียดทุกครั้งที่ลูกค้าใส่สินค้าลงในตะกร้าสินค้า สร้างคำสั่งซื้อหลังจากยืนยันการซื้อ และเปลี่ยนสถานะการซื้อในตารางรายละเอียดเพื่อทริกเกอร์และหมายเลขคำสั่งซื้อจะถูกสร้างขึ้น (แน่นอนว่าสิ่งนี้ หมายเลขคำสั่งซื้ออาจเป็นได้ทั้ง การเขียนโปรแกรมในทริกเกอร์ ยังสามารถตั้งค่าคอลัมน์ของหมายเลขคำสั่งซื้อในตารางคำสั่งซื้อเพื่อสร้างหมายเลขซีเรียลโดยอัตโนมัติ) หลังจะตัดสินหมายเลขคำสั่งซื้อแล้วบวก 1 เพื่อสร้างหมายเลขคำสั่งซื้อใหม่ แต่ฉันมักจะรู้สึกเสมอว่าโซลูชันทั้งสองนี้แย่มาก และฉันต้องการทราบว่าหมายเลขคำสั่งซื้อได้รับการจัดการอย่างไรบนเว็บไซต์เชิงพาณิชย์
ตอบ: ก่อนอื่นเลย ฉันคิดว่าไม่แนะนำให้ใช้วิธีแก้ปัญหาทริกเกอร์ ฉันจะไม่อธิบายเหตุผลอย่างละเอียด ไม่เช่นนั้นมันจะเกิดปัญหาใหญ่ขึ้นอีก นอกจากนี้ยังมีสองวิธีที่นี่ วิธีหนึ่งคือ สร้างตัวเลขจากตารางคำสั่งซื้อโดยอัตโนมัติ ขั้นแรกให้เขียนลงในตารางคำสั่งซื้อ จากนั้นดึงข้อมูลหมายเลขคำสั่งซื้อ จากนั้นอัปเดตตารางรายละเอียดคำสั่งซื้อ หมายเลขคำสั่งซื้อตามกฎเกณฑ์ทางธุรกิจ เมื่อทราบหมายเลขคำสั่งซื้อแล้ว คุณสามารถสร้างบันทึกคำสั่งซื้อหรือบันทึกรายละเอียดก่อนได้ แต่ต้องแน่ใจว่าบันทึกรายละเอียดจะต้องมีบันทึกคำสั่งซื้อในตอนท้าย ไม่เช่นนั้นจะมี รายละเอียดแปลกๆ มากมาย มีสองวิธีในการทำวิธีหลัง วิธีหนึ่งคือหมายเลขคำสั่งซื้อถูกสร้างขึ้นโดยฐานข้อมูล โดยปกติจะใช้ตารางชั่วคราว ข้อดีคือ หมายเลขซีเรียลสามารถใช้ได้กับทุกธุรกิจ ถูกสร้างขึ้นโดยโปรแกรม สามารถใช้ GUID เมื่อสร้างโปรแกรมได้ แต่วิธีที่ดีกว่าคือการใช้เวลาในการสั่งซื้อบวกกับค่าการระบุตัวตน ขนาดของรายละเอียดจะถูกกำหนดโดยจำนวนข้อมูล ส่วนการระบุตัวตนจะถูกกำหนดหมายเลขตามลำดับ ควรพิจารณารายละเอียดเวลาเพื่อป้องกันไม่ให้ผู้อื่นนับปริมาณธุรกิจของคุณโดยประมาณ (เหงื่อ~~~ นี่เป็นอีกปัญหาหนึ่ง มี ทำได้หลายวิธีค่ะ แล้วแต่สถานการณ์ ไว้วันหลังจะมาเขียนบทความเกี่ยวกับการสร้างเลขออเดอร์กันก่อนนะคะ เผื่อจะได้ข้อมูลเพียงพอ...)