วิธี HTTP เซสชันหรือฐานข้อมูล


16

ฉันสับสนเล็กน้อยตามที่ควรจะเป็นในแบบของฉันการทำงานกับการออกแบบตะกร้าสินค้าและฉันต้องการเก็บตะกร้าสินค้าในเซสชันหรือในฐานข้อมูล แต่ไม่แน่ใจว่าวิธีการใดที่จะดีที่สุด

  1. ผู้ใช้ไม่ได้เข้าสู่ระบบและเพิ่มสินค้าลงในรถเข็น (ผู้ใช้ที่ไม่ระบุชื่อ)
  2. ผู้ใช้เข้าสู่ระบบและเพิ่มสินค้าลงในรถเข็น

กรณีแรกทำให้ฉันสับสนมากขึ้นเนื่องจากมีหลายกรณีที่ผู้ใช้เยี่ยมชมเว็บช็อปและเพิ่มผลิตภัณฑ์โดยไม่ต้องลงชื่อเข้าใช้และอาจเป็นไปได้มากว่าเขาอาจจะไม่ได้ดำเนินการเช็คเอาต์

แต่เรายังต้องสร้างตะกร้าสินค้าสำหรับผู้ใช้นี้เพื่อสร้างและบันทึกตะกร้าสินค้าฉันมีสองตัวเลือก

  1. เมื่อผู้ใช้เพิ่มผลิตภัณฑ์ให้สร้างรถเข็นในฐานข้อมูลและเชื่อมโยงรถเข็นนี้กับผู้ใช้นี้ทันทีที่เขาล็อกอินย้ายรถเข็นนี้ไปยังผู้ใช้ที่เข้าสู่ระบบ
  2. สร้างรถเข็นเพิ่มสินค้าลงในนั้นและบันทึกลงในเซสชันเมื่อผู้ใช้เข้าสู่ระบบสร้างรถเข็นในฐานข้อมูลและเชื่อมโยงผู้ใช้เข้าสู่ระบบด้วยรถเข็นนี้กับผู้ใช้

ฉันรู้ว่าทั้งระบบฐานข้อมูลที่ขับเคลื่อนด้วยระบบรถเข็นและเซสชันตามอาจมีแง่บวกและเชิงลบ แต่ไม่แน่ใจว่าวิธีใดที่ดีที่สุดในการพิจารณาประเด็นต่อไปนี้

  1. scalability
  2. มีความยืดหยุ่น
  3. ขยาย
  4. แอพพลิเคชั่นควรดูแลความเร็ว

กำลังมองหาอินพุตในด้านนี้เพื่อตัดสินใจพา ธ


2
ทำไม? ฉันใช้เว็บไซต์อีคอมเมิร์ซหลายร้อยเว็บไซต์และเราเก็บทุกอย่างไว้ในคุกกี้หรือ localStorage (HTML5) นอกจากนี้เซสชันยังใช้หน่วยความจำมากเกินไป เมื่อเราทำการเข้าสู่ระบบบัญชีเราใช้คุกกี้ที่เข้ารหัสด้วยการประทับเวลา เราไม่ต้องการเซสชันเพราะเมื่อเพจโหลดเราใช้เทคนิค HTML5 เพื่อจัดเก็บและใช้ sessionStorage หลังจากโหลดครั้งเดียว นี่คือเทคโนโลยีเว็บมาตรฐานที่ใช้งานร่วมกับ IE8 + ได้
Jason Sebring

@LigiggiMendoza โอเคทำไมไม่
Jason Sebring

@ zipstory.com: ฉันยังต้องการที่จะดูเกี่ยวกับการแก้ปัญหาตาม HTML5 แต่เนื่องจากยังไม่ได้รับการสนับสนุนโดยเบราว์เซอร์ไม่กี่ฉันสงสัยบิต
Umesh Awasthi

@UmeshAwasthi ฉันคิดว่าลูกค้าของฉันไม่สนใจเกี่ยวกับคนจำนวนเล็กน้อยในเบราว์เซอร์ที่ลดลง แต่เห็นได้ชัดว่านี่เป็นวิธีที่ไม่ดีหากเป็นกรณีที่แตกต่างจากการเข้าชมเว็บของคุณ ฉันรู้ว่ายังมีอีกมากมายในโลกที่ใช้ XP บน IE7 และบางครั้ง IE6 แต่ผลิตภัณฑ์ลูกค้าของฉันบางส่วนถูกพบในร้านค้าเช่น Nordstroms และ Macy เป็นต้นและดูเหมือนว่าจะไม่เกี่ยวข้องกับเรื่องนั้น
Jason Sebring

@ zipstory.com: ฉันกำลังทำงานร่วมกับแอพลิเคชันอีคอมเมิร์ซที่ลูกค้าต้องการการสนับสนุน IE6 แม้สำหรับตอนนี้สิ่งที่คุณจะพูดว่ามัน ABT :)
Umesh Awasthi

คำตอบ:


9

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

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


แล้วฉันต้องแสดงหน้ารายละเอียดรถเข็นเมื่อไร เราควรจัดเก็บ / ดึงข้อมูลจากเซสชันหรือใช้เพื่อการเข้าถึงฐานข้อมูล
Umesh Awasthi

หากคุณเก็บรายละเอียดรถเข็นในฐานข้อมูลใช่แล้วคุณจะต้องกดฐานข้อมูล
Jakob Gade

7

ทั้งสองวิธีมีข้อดีและข้อเสีย แต่วิธีที่ฉันเห็นมันการจัดเก็บฐานข้อมูลมีข้อดีสองข้อที่ค่อนข้างใหญ่

  1. รายงาน คุณไม่สามารถรายงานเกี่ยวกับรถเข็นที่ถูกทิ้งร้างอัตราการแปลง ฯลฯ หากข้อมูลอยู่ในเซสชัน
  2. หมดเวลาเซสชัน ฉันจะรำคาญถ้าฉันไปกินอาหารเย็นและกลับมาเพื่อหารถเข็นของฉันว่างเปล่าเพราะเซสชันหมดอายุ ฉันคิดว่าผู้ค้าปลีกจะไม่ชอบเช่นนั้น เราต้องการที่จะผลักดันให้ผู้ใช้ซื้อไม่ให้เลิกและออกไป

6

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

เราใช้เซสชั่น HTML5 แทนเพื่อเก็บข้อมูลผู้ใช้ที่เราต้องการดึงอีกครั้ง แต่ไม่ต้องใช้ rountrip คุกกี้ในแต่ละครั้งเพื่อเพิ่มแบนด์วิดท์ นี่คือ IE8 + และเบราว์เซอร์ที่ทันสมัยและอุปกรณ์มือถืออื่น ๆ ทั้งหมดเข้ากันได้กับเทคโนโลยีนี้ แต่คุณสามารถจัดเก็บรถเข็นไว้ในคุกกี้เพื่อเป็นทางเลือกได้ง่ายๆเพราะนี่คือสิ่งที่เราทำก่อนหน้านี้ นี่คือรถเข็นคุกกี้ที่ดี: http://simplecartjs.org/

เมื่อผู้ใช้ลงชื่อเข้าใช้หรือเข้าสู่ระบบเราใช้คุกกี้ที่เข้ารหัสด้วยการประทับเวลาที่เข้ามา

นอกจากนี้เรายังมุ่งไปสู่การใช้ ApplicationCache หากมีซึ่งจะช่วยลดปริมาณการใช้เว็บเนื่องจากคุณสามารถดึงข้อมูลทรัพยากรและแม้แต่ข้อมูลแคตตาล็อกดังนั้นมุมมองของผู้ใช้จะเป็นเว็บไซต์โหลดเร็วสุดและมือถือจะทำงานออฟไลน์ (ลบธุรกรรม) แน่นอนคุณจะต้องระมัดระวังในการอัพเดทรายการเมื่อมีการเปลี่ยนแปลงผลิตภัณฑ์ ฯลฯ


4

คุณกำลังสมมติว่าที่เก็บข้อมูลของเซสชันและที่จัดเก็บฐานข้อมูลนั้นเป็นเอกสิทธิ์ พวกเขาไม่ได้ แต่เรามาเริ่มโดยสมมติว่าพวกมันเป็น

ข้อดีของการจัดเก็บเซสชันคือสามเท่า:

  1. ไม่จำเป็นต้องแทรกข้อมูลลงในฐานข้อมูลอย่างชัดเจน คุณเพียงแค่ตั้งค่าตัวแปรเซสชันและทำเสร็จแล้ว ใช้งานง่ายและมีความเสี่ยงต่ำ
  2. ไม่จำเป็นต้องจัดการวงจรชีวิตของการเยี่ยมชมของผู้ใช้และตะกร้าช้อปปิ้งเนื่องจากภาชนะ / กรอบทำเพื่อคุณ
  3. โดยปกติแล้วการล้างข้อมูลในเซสชันว่างเก่าโดยอัตโนมัติจะทำเพื่อคุณ

ข้อเสียของการจัดเก็บข้อมูลเซสชั่น:

  1. ความสัมพันธ์ของเซสชันยกเว้นว่าคุณตรวจสอบการจำลองแบบ
  2. ไม่มีการล้มเหลวเว้นแต่คุณจะตรวจสอบการจำลองแบบหรือการคงอยู่ด้วยตนเองของสถานะเซสชันไปยังดิสก์ซึ่งอาจซับซ้อน
  3. เซสชันทั้งหมดจะต้องเก็บไว้ในหน่วยความจำ นี่คือขยายถ้าคุณใช้การจำลองแบบ

ข้อดีของการจัดเก็บฐานข้อมูล:

  1. ไม่จำเป็นต้องกังวลเกี่ยวกับการเชื่อมโยงเซสชันหรือการจำลองสถานะ คุณสามารถปัดเศษคำขอทั้งหมด
  2. ค่าใช้จ่ายหน่วยความจำน้อยลงในแอปพลิเคชัน
  3. หากการสั่งซื้อเสร็จสมบูรณ์ทุกอย่างจะสิ้นสุดลงในฐานข้อมูลอยู่แล้วดังนั้นการดำเนินการนี้อาจทำให้เสร็จได้ง่ายเนื่องจากมีข้อมูลอยู่แล้ว

ข้อเสียของการจัดเก็บฐานข้อมูล:

  1. รถเข็นที่ถูกทิ้งร้าง - ผู้ใช้ที่ไม่ระบุชื่อบางคนเพิ่มรายการลงในตะกร้าสินค้าของพวกเขาและหายไป ข้อมูลนั้นจะวนอยู่ตลอดไปจนกว่าคุณจะมีกระบวนการหมดอายุ
  2. คุณจำเป็นต้องหาวิธีในการติดตามผู้ใช้และทราบว่าหากมีการร้องขอสิ่งนี้จะแสดงถึงเซสชันการเรียกดูที่มีอยู่หรือใหม่ (ใช่นี่เป็นเรื่องง่ายถ้าคุณใช้คุกกี้ แต่คุณจะมั่นใจได้อย่างไรว่าผู้ใช้สองคนไม่ได้ใช้ id เดียวกัน?)
  3. รหัสเพิ่มเติม

คุณไม่ได้พูดถึงแพลตฟอร์มที่คุณใช้ ฉันจะหาวิธีที่ใช้เซสชันที่มีการสำรองฐานข้อมูลซึ่งมีข้อมูลเซสชันอยู่ในหน่วยความจำเท่านั้นในช่วงอายุของรอบคำขอ / ตอบกลับโหลดจากฐานข้อมูลและบันทึกกลับไปยังฐานข้อมูล สิ่งนี้ทำให้ฉันดีในอดีต

ข้อดีของเซสชันที่มีการสำรองฐานข้อมูล:

  1. ไม่จำเป็นสำหรับเซิร์ฟเวอร์ที่เกี่ยวข้อง
  2. ง่ายในหน่วยความจำเซิร์ฟเวอร์แอป
  3. ข้อมูลเซสชั่นว่าง / ไม่ใช้นั้นถูกล้างข้อมูลสำหรับคุณ
  4. วงจรชีวิตของผู้ใช้ครั้งแรกเยี่ยมชมซ้ำปลายเซสชั่นทั้งหมดที่คิดสำหรับคุณ
  5. รหัสง่าย

ข้อเสียของเซสชันที่มีการสำรองฐานข้อมูล:

  1. การกำหนดค่า - คุณต้องตรวจสอบคอนเทนเนอร์ของคุณไม่ว่าจะเป็น PHP, Java EE (Tomcat, Jetty, JBoss, ฯลฯ ), node.js + express.js หรืออะไรก็ตามที่ไม่สนับสนุนสิ่งนี้และให้การกำหนดค่าที่เหมาะสม
  2. คุณอาจต้องโหลดการทดสอบนี้เนื่องจากคุณเพิ่มการดำเนินการฐานข้อมูล 2 รายการต่อคำขอ

มีความเป็นไปได้ที่สามซึ่งบางคนเคยสัมผัสมาก่อนหน้านี้ คุณสามารถข้ามการใช้งานเซสชันทั้งหมดและใช้ที่เก็บข้อมูลฝั่งไคลเอ็นต์โดยฝังทุกอย่างในคุกกี้หรือที่จัดเก็บในตัวเครื่อง html

ฉันจะทิ้งข้อดีข้อเสียของมันไว้เป็นแบบฝึกหัดให้คุณ แต่ฉันจะให้คำแนะนำว่าสำหรับการจัดเก็บ html5 ความเข้ากันได้ของเบราว์เซอร์อาจเป็นสิ่งที่ต้องพิจารณาอย่างรอบคอบ

ฉันได้อธิบายข้อเท็จจริงสำหรับคุณแล้ว หวังว่านี่จะช่วยให้คุณตัดสินใจได้อย่างถูกต้องกับสถานการณ์


คุณพลาดข้อได้เปรียบของการจัดเก็บฐานข้อมูลซึ่งเป็นความสามารถขององค์กรในการวิเคราะห์อัตราการซื้อของในตะกร้าสินค้า
HLGEM

@ HLGEM ความคิดที่ยอดเยี่ยม - ฉันไม่เคยคิดแบบนั้น!
Brandon

ฉันคิดถึงสิ่งนี้เพราะฉันเป็นคนที่ทำการวิเคราะห์ข้อมูลในฐานข้อมูล เมื่อออกแบบฐานข้อมูลหนึ่งในคำถามแรกควรเป็นสิ่งที่เราต้องการข้อมูลนี้และแทบจะไม่มีใครถาม
HLGEM

3

ให้เราพิจารณากรณีการใช้สองกรณีที่คุณได้กล่าวถึง

ผู้ใช้ไม่ได้เข้าสู่ระบบและเพิ่มสินค้าลงในรถเข็น (ผู้ใช้ที่ไม่ระบุชื่อ)

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

ผู้ใช้เข้าสู่ระบบและเพิ่มสินค้าลงในรถเข็น

ในกรณีนี้คุณสามารถจัดการได้เช่นเดียวกับข้างบน (ไซต์อีคอมเมิร์ซโรงเรียนเก่า) และเพิ่มข้อมูลนี้ไปยังฐานข้อมูลและเชื่อมโยงกับผู้ใช้ โดยส่วนใหญ่จะใช้เพื่อให้ข้อมูล stateful (สถานะที่บันทึกไว้จากเซสชันไปยังเซสชัน) เช่น "ประวัติการเรียกดูผลิตภัณฑ์", "คำแนะนำ" เป็นต้นเช่นคล้ายกับ Amazon.com

สิ่งที่ควรคำนึงถึง:

  • จำเป็นต้องบันทึกข้อมูลหรือไม่
  • ถ้าใช่ข้อมูลใดที่สำคัญที่สุดที่จะบันทึกไว้เพื่อให้บริการผู้ใช้ดีกว่า
  • Scalability + data storage - คุณจะบันทึกข้อมูลรถเข็นสำหรับการค้นหาอย่างรวดเร็วในฐานข้อมูลของคุณเพื่อรองรับผู้ใช้จำนวนมากได้อย่างไร?

3
นอกจากนี้ยังช่วยให้ บริษัท วิเคราะห์ยอดขาย สินค้าใส่ในรถเข็นบ่อยแค่ไหน แต่ไม่ได้ซื้อ หากเปอร์เซ็นต์สูงพวกเขาอาจต้องการดูว่าผลิตภัณฑ์มีการนำเสนออย่างไรหรือราคาเพื่อดูว่าการเปลี่ยนแปลงสามารถช่วยนำอัตราการซื้อเข้ามาได้หรือไม่ การบันทึกยังช่วยให้ผู้ใช้สามารถดูรายการเหล่านั้นได้อย่างรวดเร็วหากเขาไม่ได้สั่งซื้อในวันที่เขามองแทนที่จะมองหาพวกเขาอีกครั้ง ดังนั้นบางทีคุณอาจวางมันไว้ในรถเข็นของคุณ แต่ต้องการรอจนถึงพรุ่งนี้ (วันจ่ายเงินเดือน) เพื่อซื้อจริง ดังนั้นการบันทึกข้อมูลอาจส่งผลให้ลูกค้าที่แท้จริงของคุณซื้อสิ่งต่างๆมากขึ้น
HLGEM

แต่ท้ายที่สุดนี่คือปัญหาข้อกำหนดเกี่ยวกับข้อกำหนดและคุณควรบอกธุรกิจของคุณว่าคุณวางแผนที่จะทำอะไรและตรวจสอบให้แน่ใจว่าเป็นสิ่งที่พวกเขาคาดหวังก่อนที่คุณจะสร้างอะไร
HLGEM

จำไว้ว่าคุณต้องคิดเกี่ยวกับการสั่งซื้อและตะกร้าสินค้าจากมุมมองของสิ่งที่ธุรกิจอาจต้องการข้อมูลสำหรับในอนาคต หากพวกเขาต้องการวิเคราะห์ข้อมูลวิธีที่ดีที่สุดคือเก็บไว้ นักพัฒนาแขวนส่วนติดต่อผู้ใช้ onteh และลืมจุดประสงค์ของข้อมูลในการจัดเก็บเมื่อทำการ desiging
HLGEM

@HLGEM: จุดดีมาก! ฉันตอบคำถามนี้ตามความจำเป็นในการสนับสนุนฟังก์ชั่นรถยนต์สำหรับผู้ใช้ทั่วไปกับสมาชิกไซต์ จากมุมมองทางธุรกิจควรมีระบบสถิติแยกต่างหากซึ่งขึ้นอยู่กับระบบฐานข้อมูลบางประเภทที่ติดตามผลิตภัณฑ์ในแง่ของภูมิศาสตร์, จำนวนผู้ใช้, ผลิตภัณฑ์ที่เกี่ยวข้อง, ซื้อเทียบกับการละทิ้งเป็นต้น
GeekByte

0

ไปที่เซสชันเมื่อผู้ใช้ไม่ได้เข้าสู่ระบบแม้ในขณะที่สร้างรถเข็นในเซสชั่นครั้งแรกและยังคงอยู่ในฐานข้อมูลเฉพาะเมื่อผู้ใช้ออกจากระบบหรือเซสชั่นหมดเวลา

คุณต้องตรวจสอบจำนวนรถเข็นที่สร้างขึ้นในเซสชัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.