Jak zarządzać koszykiem zakupów

0

Cześć, jakiś czas zastanawiam się jak podejść do ww. tematu. Załóżmy, że użytkownik dodał jakieś rzeczy na urządzeniu A (laptop), ale ten mu się rozładował, więc postanowił dokończyć dodawanie produktów na urządzeniu B (powiedzmy telefon). No i teraz chciałbym mieć już te dodane rzeczy w koszyku. Czy produkty dodawane do koszyka powinny być od razu persystowane w bazie? Wydaje mi się to niezbyt wydajne bo jak wiadomo każdy IO jest troche czasochłonny. Może trzymać to w cachu? Myślałem też nad kasowaniem tego koszyka po jakimś czasie - tutaj chyba przydałoby się skorzystać z session id, dobrze kombinuję? Jak należy do tego podejść? :)

3

Raczej nie ma jakiejś generalnej "zasady". Niektórzy powiedzą że w ogóle powinieneś persystować w jakimś even store wszystkie operacje na koszyku a nie tylko trzymać jego "stan". Bo np. do rekomendacji może być bardzo ważne że ktoś włożył do koszyka X a potem jednak wyrzucił daną rzecz ;)

0

Pomysł z cache raczej nie wypali. Jak na produkcji będziesz miał kilka workerów to nie masz gwarancji, że zapytania od jednego usera będę obsłużone przez tego samego. Dlatego zwykle stan sesji jest zapisywany w bazie (ewentualnie jakiś Redis czy coś). I tam możesz trzymać stan koszyka, bo framework i tak będzie przy każdym zapytaniu pobierał ten stan z bazy.

Tylko wtedy nie obsługujemy tego przypadku z zepsutym laptopem. Wtedy pozostaje stworzenie nowej tabelki i jedno zapytanie do bazy co request. Chyba że framework daje możliwość przypięcia sessionId do usera, ale szczerze to nigdy czegoś takiego nie potrzebowałem i nie wiem czy to jest standard.

1

Jeszcze pozostaje podstawowe pytanie... mówimy o zapisie koszyka dla użytkownika zalogowanego czy niezalogowanego...

6

Obsłużenie akcji w stylu "user647543 umieścił w koszyku 2 sztuki produktu o id 7538 w cenie 369" w ilości kilka takich operacji na minutę nie powinno być problemem dla jakiekolwiek bazy. A jeśli takich akcji masz kilkadziesiąt na sekundę to znaczy, że mówimy o ogromnym sklepie, który posiada kasę na utrzymanie infrastruktury odpowiedniej do udźwignięcia tego. Nie przejmuj się problemami allegro czy eBay, jeśli masz 50 userow na dzień ;)

Odpowiadając na pytanie główne - ja bym trzymał to w bazie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1