Pendekatan Sesi HTTP atau Database

16

Saya sedikit bingung seperti apa yang harus menjadi pendekatan saya, Bekerja pada desain keranjang belanja dan saya perlu menyimpan keranjang belanja baik dalam sesi atau dalam database tetapi tidak yakin pendekatan mana yang terbaik.

  1. Pengguna tidak masuk dan menambahkan produk ke troli (Pengguna anonim)
  2. Pengguna masuk dan menambahkan produk ke troli.

Kasus pertama lebih membingungkan bagi saya, karena ada banyak kasus di mana pengguna hanya mengunjungi web-shop dan menambahkan produk tanpa masuk dan sangat mungkin bahwa ia mungkin tidak pergi untuk proses checkout.

Tapi kita masih perlu membuat Keranjang Belanja untuk pengguna ini, untuk membuat dan menyimpan keranjang belanja saya punya dua opsi.

  1. Saat pengguna menambahkan produk, buat gerobak di database dan kaitkan gerobak ini dengan pengguna ini, saat dia masuk, gerakkan gerobak ini ke pengguna yang masuk.
  2. Buat Keranjang, tambahkan produk ke sana dan simpan ke Sesi, ketika pengguna masuk, buat Keranjang di basis data dan pengguna yang masuk yang terkait dengan kereta ini dengan Pengguna.

Saya tahu bahwa kedua basis data yang digerakkan sistem Cart juga berdasarkan Sesi dapat memiliki aspek positif dan negatif di sana, tetapi tidak yakin mana yang mungkin merupakan pendekatan terbaik dengan mempertimbangkan poin-poin berikut

  1. Skalabilitas
  2. Fleksibilitas
  3. Kemungkinan diperpanjang
  4. Aplikasi Harus menjaga kecepatan

Mencari input pada aspek ini untuk memutuskan jalan.

Umesh Awasthi
sumber
2
Mengapa? Saya menjalankan beberapa ratus situs web e-commerce dan kami menyimpan semuanya dalam cookie atau localStorage (HTML5). Juga, sesi menghabiskan memori. Ketika kami melakukan login, kami menggunakan cookie terenkripsi dengan stempel waktu. Kami tidak memerlukan sesi karena ketika halaman dimuat, kami menggunakan teknik HTML5 untuk menyimpan dan menggunakan sessionStorage setelah satu kali memuat. Ini adalah teknologi web standar IE8 + yang kompatibel.
Jason Sebring
@LuiggiMendoza ok kenapa tidak.
Jason Sebring
@ zipstory.com: saya juga ingin melihat-lihat tentang solusi berbasis HTML5, tetapi masih karena tidak didukung oleh beberapa browser, saya agak ragu
Umesh Awasthi
@UmeshAwasthi Saya kira klien saya tidak peduli dengan segelintir orang di browser yang lebih rendah tetapi jelas ini adalah pendekatan yang buruk jika ini kasus yang berbeda dalam lalu lintas web Anda. Saya tahu masih banyak dunia menggunakan XP pada IE7 dan kadang-kadang IE6 tetapi beberapa produk klien saya ditemukan di toko-toko seperti Nordstroms dan Macy dll dan tampaknya tidak peduli tentang itu.
Jason Sebring
@ zipstory.com: Saya bekerja dengan aplikasi eCommerce di mana klien bahkan menginginkan dukungan untuk IE6, sekarang apa yang akan Anda katakan abt it :)
Umesh Awasthi

Jawaban:

9

Saya akan mencari solusi di mana ID unik diberikan kepada semua pengunjung ketika mereka pertama kali mengunjungi situs. Tidak masalah jika mereka anonim atau dikonfirmasi. Saat pengguna anonim mendaftar, simpan ID unik.

Simpan keranjang belanja di basis data. Penyimpanan murah, dan seharusnya tidak menjadi masalah performa untuk melakukan kueri untuk keranjang sesekali.

Jakob Gade
sumber
bagaimana ketika saya perlu menampilkan halaman detail keranjang? haruskah kita menyimpan / mengambil data dari sesi atau mencari basis data?
Umesh Awasthi
Jika Anda menyimpan detail keranjang di basis data, maka ya, Anda harus menekan basis data.
Jakob Gade
7

Kedua metode memiliki kelebihan dan kekurangan, tetapi cara saya melihatnya, penyimpanan database memiliki dua keunggulan yang cukup besar.

  1. Pelaporan. Anda tidak dapat melaporkan gerobak yang ditinggalkan, tingkat konversi, dll. Jika data ada di sesi.
  2. Batas waktu sesi. Saya akan kesal jika saya pergi makan malam dan kembali untuk menemukan kereta saya dikosongkan karena sesi berakhir. Saya akan membayangkan pengecer juga tidak akan menyukainya. Kami ingin mendorong pengguna untuk membeli, bukan untuk menyerah dan pergi.
Jason P
sumber
6

Pertanyaannya adalah dengan asumsi Anda perlu sesi sama sekali yang tidak diperlukan di pasar klien saya. Saya kebetulan menjalankan beberapa ratus situs web eCommerce dan beberapa dari mereka mendapatkan traffic tinggi. Kami tidak pernah menggunakan sesi karena mereka tidak dapat diskalakan kecuali ditiadakan maka mereka lebih lambat atau membutuhkan lebih banyak pengaturan. Sesi menghabiskan memori dan database mengambil keadaan sesi sangat lambat dan membutuhkan lebih banyak bagian yang bergerak.

Sebagai gantinya, kami menggunakan HTML5 sessionStorage untuk mempertahankan informasi pengguna apa pun yang perlu kami tarik lagi dan lagi, tetapi tanpa memerlukan cookie rountrip setiap kali untuk menambah bandwidth. Ini adalah IE8 + dan semua peramban dan perangkat seluler modern lainnya kompatibel dengan teknologi ini. TETAPI Anda bisa dengan mudah menyimpan keranjang dalam cookie sebagai cadangan karena ini adalah apa yang kami lakukan sebelumnya. Ini adalah kereta kue yang bagus: http://simplecartjs.org/

Saat pengguna masuk atau masuk, kami menggunakan cookie terenkripsi dengan cap waktu dimasukkan.

Kami juga bergerak ke arah menggunakan ApplicationCache di mana berlaku yang selanjutnya akan mengurangi lalu lintas web sebagai catatan karena Anda dapat mengambil lebih awal sumber daya dan bahkan katalog data sehingga perspektif pengguna akan menjadi situs web pemuatan super cepat dan seluler juga akan bekerja offline (dikurangi transaksi). Tentu saja Anda harus berhati-hati untuk memperbarui manifes ketika produk berubah dll.

Jason Sebring
sumber
4

Anda mengasumsikan bahwa penyimpanan sesi dan penyimpanan basis data eksklusif. Mereka bukan. Tapi mari kita mulai dengan mengasumsikan mereka.

Keuntungan untuk penyimpanan sesi adalah tiga kali lipat:

  1. Tidak perlu memasukkan data secara eksplisit ke dalam basis data. Anda cukup mengatur variabel sesi dan selesai. Sederhana dan berisiko rendah secara fungsional.
  2. Tidak perlu mengelola siklus hidup kunjungan pengguna dan keranjang belanja karena wadah / kerangka kerja melakukannya untuk Anda
  3. Biasanya pembersihan otomatis sesi lama yang menganggur dilakukan untuk Anda.

Kekurangan penyimpanan sesi:

  1. Afinitas sesi, kecuali jika Anda menyelidiki replikasi
  2. Tidak ada failover, kecuali jika Anda menyelidiki replikasi atau kegigihan status sesi ke disk secara manual, yang dapat menjadi rumit.
  3. Semua sesi harus disimpan dalam memori. Ini diperkuat jika Anda menggunakan replikasi.

Keuntungan penyimpanan basis data:

  1. Tidak perlu khawatir tentang afinitas sesi atau replikasi negara. Anda dapat menghapus semua permintaan.
  2. Lebih sedikit memori overhead dalam aplikasi.
  3. Jika pesanan selesai, semuanya berakhir di database, jadi ini bisa membuat penyelesaian mudah karena data sudah ada.

Kerugian dari penyimpanan basis data:

  1. Keranjang yang ditinggalkan - beberapa pengguna anonim menambahkan item ke keranjang belanja mereka dan menghilang. Data itu bertahan selamanya kecuali Anda memiliki semacam proses kedaluwarsa.
  2. Anda perlu menemukan cara untuk melacak pengguna dan mencari tahu apakah, untuk permintaan yang diberikan, ini merupakan sesi penelusuran yang ada atau baru. (ya, ini mungkin mudah jika Anda menggunakan cookie, tetapi bagaimana Anda memastikan dua pengguna tidak berakhir dengan id yang sama?).
  3. Lebih banyak kode

Anda tidak menyebutkan platform apa yang Anda gunakan. Saya akan mencari pendekatan yang menggunakan sesi yang didukung basis data di mana data sesi hanya ada dalam memori selama siklus permintaan / respons, memuatnya dari database dan menyimpannya kembali ke database. Ini telah membantu saya dengan baik di masa lalu.

Keuntungan dari sesi yang didukung basis data:

  1. Tidak perlu untuk afinitas server.
  2. Mudah di memori server aplikasi
  3. Data sesi siaga / terbengkalai dibersihkan untuk Anda.
  4. Daur hidup kunjungan pertama pengguna, kunjungan berulang, akhir sesi semuanya sudah ditentukan untuk Anda.
  5. Mudah dikodekan

Kerugian dari sesi yang didukung basis data:

  1. Konfigurasi - Anda perlu menyelidiki wadah Anda, apakah itu PHP, Java EE (Tomcat, Jetty, JBoss, dll.), Node.js + express.js atau yang lainnya mendukung ini dan menyediakan konfigurasi yang tepat.
  2. Anda mungkin perlu memuat tes ini karena Anda menambahkan 2 operasi basis data per permintaan.

Ada kemungkinan ketiga, yang disentuh seseorang sebelumnya. Anda bisa melewatkan penggunaan sesi sama sekali dan menggunakan penyimpanan sisi klien dengan memasukkan segala sesuatu dalam penyimpanan lokal cookie atau html.

Saya akan meninggalkan pro / kontra dari itu sebagai latihan untuk Anda, tetapi saya akan memberi Anda petunjuk bahwa untuk penyimpanan HTML5, kompatibilitas browser mungkin sesuatu yang harus ditinjau dengan cermat.

Saya sudah menguraikan fakta untuk Anda. Semoga ini membantu Anda membuat keputusan yang tepat untuk situasi Anda.

Brandon
sumber
Anda melewatkan keuntungan dari penyimpanan basis data, dengan kemampuan organisasi untuk menganalisis tingkat pembelian barang-barang yang ditempatkan di kereta belanja.
HLGEM
@HLGEM Ide bagus - Saya tidak pernah memikirkan itu!
Brandon
Saya memikirkan hal ini karena saya orang yang melakukan analisis data dalam database. Saat merancang basis data, salah satu pertanyaan pertama adalah untuk apa kita akan membutuhkan data ini dan hampir tidak ada orang yang menanyakannya.
HLGEM
3

Biarkan kami mempertimbangkan dua kasus penggunaan yang telah Anda sebutkan

Pengguna tidak masuk dan menambahkan produk ke troli (Pengguna anonim)

Dalam hal ini, Anda pasti ingin menyimpan informasi keranjang pengguna dalam suatu sesi untuk melayani pengguna dengan baik selama sesi mereka. Jika dia memutuskan untuk masuk / membuat akun, Anda dapat menangani ini berdasarkan use case berikutnya. Jika dia tidak masuk, Anda tidak perlu mengisi database Anda dengan informasi pengguna tamu ini karena hanya digunakan untuk melayani tamu selama sesi. Data ini dapat ditangani berdasarkan Stateless yaitu tidak negara tidak disimpan dari sesi ke sesi.

Pengguna masuk dan menambahkan produk ke troli.

Dalam hal ini, Anda dapat menanganinya dengan cara yang sama seperti di atas (situs e-commerce sekolah lama) dan juga menambahkan informasi ini ke database dan mengaitkannya dengan pengguna. Ini terutama digunakan untuk memberikan informasi stateful (keadaan disimpan dari sesi ke sesi) seperti "Riwayat Penjelajahan Produk", "Rekomendasi" dll. Yaitu mirip dengan Amazon.com.

Hal-hal untuk dipikirkan:

  • Apakah perlu menyimpan data?
  • Jika ya, data apa yang paling penting untuk disimpan untuk melayani pengguna dengan lebih baik?
  • Skalabilitas + penyimpanan data - Bagaimana Anda menyimpan informasi keranjang untuk pencarian cepat di basis data Anda untuk mendukung banyak pengguna?
GeekByte
sumber
3
Ini juga membantu perusahaan menganalisis penjualan. Seberapa sering suatu produk dimasukkan ke dalam kereta tetapi tidak dibeli. Jika persentasenya tinggi, maka mereka mungkin ingin melihat bagaimana produk disajikan atau harga untuk melihat apakah perubahan dapat membantu menentukan tingkat pembelian. Menyimpan juga dapat memungkinkan pengguna untuk melihat barang-barang itu dengan cepat jika dia tidak memesan teh pada hari dia mencari daripada mencari lagi. Jadi mungkin Anda memasukkannya ke troli tetapi ingin menunggu hingga besok (gajian) untuk benar-benar membelinya. Jadi, menyimpan data dapat menyebabkan pelanggan Anda yang sebenarnya membeli lebih banyak barang.
HLGEM
Tetapi pada akhirnya ini adalah masalah definisi persyaratan dan Anda harus memberi tahu bisnis Anda apa yang Anda rencanakan dan pastikan itu yang mereka harapkan sebelum Anda membangun apa pun.
HLGEM
Ingatlah Anda perlu memikirkan tentang pesanan dan keranjang belanja dari perspektif apa yang dibutuhkan oleh bisnis untuk data di masa depan. Jika mereka ingin menganalisis data, yang terbaik adalah menyimpannya. Pengembang terhenti antarmuka pengguna onteh dan lupa tujuan data disimpan ketika mendesain.
HLGEM
@HLGEM: Poin yang sangat bagus! Saya menjawab pertanyaan ini hanya berdasarkan pada kebutuhan untuk mendukung fungsi mobil untuk pengguna tamu versus anggota situs. Dari sudut pandang bisnis, harus ada sistem statistik terpisah yang bergantung pada semacam sistem basis data yang melacak produk dalam hal geografi, # pengguna, produk terkait, beli versus buangan, dll.
GeekByte
0

Pergi untuk sesi ketika pengguna tidak login. Bahkan ketika login membuat keranjang di sesi pertama, dan bertahan ke dalam database hanya ketika pengguna logout atau sesi habis.

Anda harus terus memeriksa jumlah gerobak yang dibuat di sesi ini.

Sudhanshu Umalkar
sumber