Ich habe gerade einige Ideen zu Einkaufswagen von meinem Klassenkameraden Wu Lei gesehen, der mit diesem Aspekt des E-Commerce vertraut ist, also bin ich herausgesprungen, um meine Scham zu zeigen, und hoffe, dass es einigen Kollegen von Nutzen sein wird. Ich wollte ursprünglich auf Folgendes antworten, aber es stellt sich heraus, dass das Schreiben viel Zeit in Anspruch nimmt, daher kann ich es in Zukunft einfacher selbst finden : 1. Sollte Sollen die Daten im Warenkorb in der Datenbank gespeichert werden?
Ich möchte vor allem wissen, wie echte Softwareentwickler in realen Projekten über dieses Problem denken. Nachdem ich bei Google gesucht hatte, fand ich einen Artikel von einem Internetnutzer in unserem Garten: Der Warenkorb sollte ein Modul zum vorübergehenden Speichern von Daten sein, und er speicherte sie im Session-Objekt. Was dieser Internetnutzer gesagt hat, macht Sinn, aber mir gefällt dieser Ansatz nicht. Wenn alle es im Session-Objekt speichern und Tausende von Benutzern gemeinsam einkaufen, wird der ASP.NET-Server definitiv eine enorme Last tragen. Vielleicht sind unsere inländischen Websites vielleicht besser, aber wie machen wir das für Websites wie Amazon? Die Amazon China-Website, bei der es sich um die Website von Joyo handelt, speichert sie nicht im Session-Objekt, denn wenn ich dieses Mal keine Bestellung für die Produkte abschicke, die ich in den Warenkorb gelegt habe, befinden sich diese Produkte nach der Anmeldung immer noch im Warenkorb im nächsten Mal. Deshalb dachte ich, dass sie die Daten aus diesen Einkaufswagen möglicherweise in eine Datenbank eingeben würden.
Antwort: Das Speichern des Warenkorbs in der Sitzung scheint nur in der Kursgestaltung an Universitäten oder in einigen Praktikumsprojekten zu existieren, die niemanden interessieren. Tatsächlich speichern fast alle E-Commerce-Websites Warenkorbdaten in der Datenbank. Hier einige Erklärungen und Designüberlegungen:
1. Die Sitzung eignet sich nicht zum Speichern großer Datenmengen. Wenn viele Benutzer vorhanden sind, wirkt sich dies zwangsläufig auf die Serverleistung aus, was vermieden werden sollte.
2. Es besteht das Problem eines versehentlichen Sitzungsverlusts. Wenn der Benutzer versehentlich den Browser schließt, gehen alle Artikel im Warenkorb verloren, was zu einer sehr schlechten Benutzererfahrung führt.
3. Cookies können das Sitzungsproblem im oben genannten Punkt lösen, aber aufgrund der Längenbeschränkung von Cookies, des Kommunikationsaufwands bei der Verwendung von Cookies und Sicherheitsaspekten sind Cookies nicht für Einkaufswagen geeignet.
4. Eine bessere Benutzererfahrung besteht darin, dass der Warenkorbstatus innerhalb eines bestimmten Zeitraums aufgezeichnet werden kann, unabhängig davon, ob der Benutzer angemeldet ist oder nicht. Dies erfordert, dass der Warenkorb in der Datenbank nicht mit dem Benutzer verknüpft werden kann.
5. Bei den in den Warenkorb gelegten Produkten handelt es sich in der Regel um Produkte mit Kaufabsicht, sie müssen jedoch nicht unbedingt zu tatsächlichen Bestellungen werden. Derzeit spielt die Speicherung dieser Daten eine entscheidende Rolle bei der Datengewinnung und Geschäftsanalyse.
Frage: 2. Über Parallelität?
Es stellte sich heraus, dass ich bei der Entwicklung meiner eigenen Modell-Website einmal über diese Frage nachgedacht habe: Wenn ein Kunde einige Bücher in den Warenkorb auf der Website legt, sollte diese Anzahl an Büchern dann vom Bestand abgezogen werden? Das habe ich getan. Ich subtrahiere die Menge der entsprechenden Bücher im Warenkorb von der Datenbank, um zu verhindern, dass andere Benutzer zu diesem Zeitpunkt die falsche Bestandsmenge sehen (wenn sie nicht subtrahiert wird, können andere Benutzer sie kaufen. Beispiel: die Anzahl der Bücher in Der Bestand beträgt 10 Dieses Buch, Kunde A legt 10 Exemplare in seinen Warenkorb, und Kunde B legt ebenfalls 10 Exemplare in seinen Warenkorb, dann wird es zu einem Konflikt, wer dieses Buch kauft. Dies hat jedoch zur Folge, dass jedes Mal, wenn ein Kunde den Warenkorb aktualisiert, eine Kommunikation mit der Datenbank stattfindet, was die Belastung des Datenservers erhöht. Ich glaube, dass Sie vor ein paar Tagen auf das Problem gestoßen sind, dass Sie beim Kauf des Buches „In-Depth Understanding of Operating Systems“ ursprünglich eine Bestellung aufgegeben haben, aber darüber informiert wurden dass es am nächsten Tag ausverkauft war. Dieser Vorfall hat die Glaubwürdigkeit von Amazon.cn tatsächlich stark beeinträchtigt. Ich weiß nicht, ob ihr System dieses Problem jetzt gelöst hat, aber der Joyo-Preis für das Buch „In-Depth Understanding of Operating Systems“ ist nicht mehr derselbe wie früher . Ich weiß nicht, wie die Experten dieses Problem gelöst haben. Gerne können Sie Ihre erfolgreichen Erfahrungen in den Kommentaren niederschreiben.
Antwort: Lassen Sie uns zunächst über die Belastung des Datenbankservers sprechen. Überlegen Sie, wie oft bei jedem Zugriff auf eine Seite auf die Datenbank zugegriffen werden muss, und überlegen Sie dann, wie oft der Austausch für einen Vorgang des Hinzufügens erforderlich ist Ein Warenkorb (die Anzahl der Zugriffe hängt hauptsächlich von der Benutzerfreundlichkeit der Website ab, das ist ein anderes Thema). Obwohl eine Änderung des Designs hier den Datenbankdruck verringern kann, ist dies kein Engpass Hier muss man nicht allzu viel Aufmerksamkeit schenken.
Es ist derzeit üblich, dass die Waren im Warenkorb nicht sofort aus dem Lagerbestand entfernt werden. Dies dient hauptsächlich dazu, zu verhindern, dass jemand die Waren böswillig in den Warenkorb legt. Darüber hinaus ist in der Regel eine Redundanz gegeben Die Waren im Warenkorb werden nicht vom Lagerbestand abgezogen. Bei der endgültigen erfolgreichen Bestellung dürfen Sie nicht zulassen, dass der Warenkorb den Verkauf beeinträchtigt. Der Lagerbestand wird im Allgemeinen abgezogen, wenn die Bestellung erfolgreich übermittelt wurde. Das heißt, wenn der Benutzer die Bestellung abschickt, haben Sie eine weitere Möglichkeit, den Benutzer daran zu erinnern, dass kein Lagerbestand vorhanden ist, sodass beim Aufgeben der Bestellung kein Lagerbestandsabzug erforderlich ist Warenkorb. Für erfolgreiche Bestellungen gelten nicht alle von Benutzern übermittelten Bestellungen als erfolgreiche Bestellungen. Dieses Programm ist schwierig zu schreiben, aber es ist in der Tat sehr wichtig Die Daten stammen aus dem System, das innerhalb weniger Minuten eine automatische Prüfung durchführt. Die Intensität der Prüfung hängt von der Branche ab. Dadurch können die meisten gefälschten Bestellungen eliminiert werden, und einige von ihnen müssen möglicherweise zur manuellen Prüfung übertragen werden durch das automatische Überprüfungssystem.
Bei manchen Spezialprodukten wie z. B. Konzertkarten kann es sinnvoller sein, einen Sitzplatz nach dem Platzieren des Warenkorbs zu reservieren Unmittelbar nach dem Platzieren des Warenkorbs wird es jedoch automatisch freigegeben, wenn es nicht innerhalb einer bestimmten Zeitspanne, z. B. zehn Minuten, zu einer echten Bestellung kommt. Dies kann zwar die böswillige Sitzplatzbesetzung nicht vollständig beseitigen, kann jedoch die meisten Probleme lösen. Heutzutage unterscheiden sich erfolgreiche Bestellungen im Ticketing von den meisten anderen Branchen. Das Kriterium für die Beurteilung erfolgreicher Online-Sitzplatzbestellungen ist in der Ticketing-Branche, ob die Zahlung erfolgreich war, was bedeutet, dass Sie nur zehn Jahre bleiben können, wenn Sie nicht bezahlen Minuten.
Frage: 3. Die Beziehung zwischen Bestellungen und Bestelldetails und Einkaufswagen
Ich denke, dieses Problem war für diese Art von Website möglicherweise schon immer ein großes Problem! Vor zwei Tagen interviewte mich Lehrer Chen von CSTP am Telefon zu dieser Frage. Ich war damals sehr nervös und meine Antwort auf die Frage war nicht sehr klar. Tatsächlich ist dieses Problem nicht schwer zu verstehen: Es gibt zwei Tabellen, Bestellungen und Details. Jede Spalte in der Bestelltabelle verweist auf die entsprechende Spalte in der Detailtabelle. Der Fremdschlüssel ist die Bestellnummer in der Bestelltabelle.
Antwort: Diese Frage ist relativ einfach. Legen Sie sie in den Warenkorb und behandeln Sie sie mit einem Status. In diesem Zustand kann die Bestellung geändert werden und der Warenkorb wird in das Bestellsystem eingefügt. Achten Sie auf die Handhabung des Benutzer-Login- und Nicht-Login-Status. Die zweite besteht darin, eine separate Warenkorbtabelle zu haben. Wenn die Bestellung endgültig abgeschickt wird, werden die Informationen im Warenkorb in die Bestell- und Bestelldetailstabelle kopiert. Letzteres wird häufiger verwendet und die konkrete Wahl hängt von der Branche und den Produktattributen ab.
Frage: 4. Wie wird die Bestellnummer in der Detailliste generiert?
Diese Frage stammt von Frage 3. Ich weiß immer noch nicht, wie ich dieses Problem lösen soll. Ich habe zwei Lösungen: Eine verwendet einen Trigger und die andere programmiert. Ersteres fügt jedes Mal ein Detail hinzu, wenn der Kunde ein Produkt in den Warenkorb legt, generiert nach Bestätigung des Kaufs eine Bestellung und ändert den Kaufstatus in der Detailtabelle, um den Auslöser auszulösen und eine Bestellnummer (natürlich diese Bestellnummer) zu generieren Die Programmierung im Trigger kann auch darin bestehen, eine Spalte mit der Bestellnummer in der Bestelltabelle festzulegen, um automatisch eine Seriennummer zu generieren. Letzterer beurteilt die Bestellnummer und addiert dann 1 dazu, um eine neue Bestellnummer zu generieren. Aber ich habe immer das Gefühl, dass diese beiden Lösungen sehr schlecht sind, und ich würde gerne wissen, wie mit Bestellnummern auf kommerziellen Websites umgegangen wird.
Antwort: Zunächst einmal halte ich die Trigger-Lösung für nicht ratsam. Ich werde die Gründe nicht erläutern, sonst wird es ein großes Durcheinander. Hier gibt es auch zwei Methoden: Beim Generieren einer Bestellung wird diese zuerst in die Bestelltabelle geschrieben, dann die Bestellnummer abgerufen und dann die Bestelldetailtabelle aktualisiert Wenn die Bestellnummer gemäß den Geschäftsregeln bekannt ist, können Sie zunächst einen Bestelldatensatz oder einen Detaildatensatz erstellen. Sie müssen jedoch sicherstellen, dass der Detaildatensatz am Ende einen Bestelldatensatz enthält viele seltsame Details. Für die letztere Methode gibt es zwei Methoden. Die eine besteht darin, dass die Bestellnummer in der Regel von der Datenbank generiert wird. Der Vorteil besteht darin, dass die Seriennummer universell für alle Unternehmen verwendet werden kann Die von einem Programm generierte Nummer kann beim Generieren des Programms verwendet werden. Eine bessere Möglichkeit besteht darin, die Bestellzeit plus den Identifikationswert zu verwenden. Der Zeitteil kann auf der Bestellung basieren Die Größe der Granularität wird anhand des Volumens bestimmt. Der Identifikationsteil ist der Reihe nach nummeriert. Die Zeitgranularität sollte ebenfalls berücksichtigt werden, um zu verhindern, dass andere Ihr Geschäftsvolumen grob zählen (Schweiß ~~~ Dies ist auch ein weiteres Problem. Es gibt viele Methoden. Es hängt von der Situation ab. Ich werde an einem anderen Tag einen Artikel über die Generierung von Bestellnummern schreiben, damit ich wahrscheinlich genug Informationen habe.