Je viens de voir quelques idées sur les paniers d'achat de mon camarade de classe Wu Lei. Je connais bien cet aspect du commerce électronique, alors j'ai sauté le pas pour montrer ma honte, j'espère que cela sera utile à certains collègues. Au départ, je voulais répondre à ce qui suit, mais il s'avère que cela prend beaucoup de temps à écrire, alors autant l'écrire ici, ce sera plus facile de le trouver par moi- même à l'avenir. les données du panier doivent-elles être stockées dans la base de données ?
Je veux surtout savoir comment les vrais ingénieurs logiciels pensent à ce problème dans des projets réels. Après une recherche sur Google, j'ai trouvé un article d'un internaute dans notre jardin : Le panier devrait être un module permettant de stocker temporairement des données, et il les a stockées dans l'objet Session. Ce que cet internaute a dit est logique, mais je n'aime pas cette approche. Si tout le monde le stocke dans l'objet Session et que des milliers d'utilisateurs achètent ensemble, le serveur ASP.NET supportera certainement une charge énorme. Peut-être que nos sites Web nationaux sont meilleurs, mais comment pouvons-nous faire cela pour des sites Web comme Amazon ? Le site Web d'Amazon Chine, qui est le site Web de Joyo, ne le stocke pas dans l'objet Session, car si je ne soumets pas de commande pour les produits que j'ai mis dans le panier cette fois, ces produits seront toujours dans le panier après la connexion. la prochaine fois. J'ai donc pensé qu'ils pourraient mettre les données de ces paniers dans une base de données.
Réponse : Le stockage du panier dans la Session semble n'exister que dans la conception de cours dans les universités ou dans certains projets de stage dont personne ne se soucie. En fait, presque tous les sites Web de commerce électronique stockent les données du panier dans la base de données. Voici quelques explications et considérations de conception :
1. La session n'est pas adaptée au stockage de grandes quantités de données. Lorsqu'il y a de nombreux utilisateurs, cela affectera inévitablement les performances du serveur, ce qui doit être évité.
2. Il existe un problème de perte accidentelle de session, ou lorsque l'utilisateur ferme accidentellement le navigateur, tous les articles du panier seront perdus, ce qui entraînera une très mauvaise expérience utilisateur.
3. Les cookies peuvent résoudre le problème de session dans l'élément ci-dessus, mais en raison de la limite de longueur des cookies, de la surcharge de communication lors de l'utilisation des cookies et de considérations de sécurité, les cookies ne conviennent pas aux paniers d'achat.
4. Une meilleure expérience utilisateur est que, que l'utilisateur soit connecté ou non, l'état du panier peut être enregistré dans un certain laps de temps. Cela nécessite que le panier dans la base de données ne puisse pas être lié à l'utilisateur.
5. Les produits placés dans le panier sont généralement des produits avec une intention d'achat, mais ils ne deviennent pas nécessairement de véritables commandes. À l'heure actuelle, la conservation de ces données joue un rôle essentiel dans l'exploration des données et l'analyse commerciale.
Question : 2. À propos de la concurrence ?
Il s'avère que lorsque je développais mon propre site Web fictif, j'ai un jour pensé à cette question : si un client met des livres dans le panier sur le site Web, ce nombre de livres doit-il être soustrait de l'inventaire ? C'est ce que j'ai fait. Je soustrais de la base de données la quantité des livres correspondants dans le panier pour éviter que les autres utilisateurs ne voient la fausse quantité de stock à ce moment-là (si elle n'est pas soustraite, alors d'autres utilisateurs peuvent l'acheter. Par exemple : le nombre de livres dans l'inventaire est de 10 exemplaires de ce livre, le client A met 10 exemplaires dans son panier, et le client B met également 10 exemplaires dans son panier, alors qui achètera ce livre deviendra un conflit). Cependant, le résultat est que chaque fois qu'un client met à jour son panier, il y aura une communication avec la base de données, ce qui augmente la charge sur le serveur de données. Amazon.cn ne s'en sort pas très bien à cet égard. Il y a quelques jours, je pense que vous avez peut-être rencontré le problème suivant : lorsque vous avez acheté le livre "Compréhension approfondie des systèmes d'exploitation", vous avez initialement passé une commande, mais vous en avez été informé. qu'il était en rupture de stock le lendemain. Cet incident a en effet grandement affecté la crédibilité d'Amazon.cn. Je ne sais pas si leur système a résolu ce problème maintenant, mais le prix Joyo du livre "Compréhension approfondie des systèmes d'exploitation" n'est plus ce qu'il était. . Je ne sais pas comment les experts ont résolu ce problème. Vous êtes invités à écrire votre expérience réussie dans les commentaires.
Réponse : Tout d'abord, parlons de la charge sur le serveur de base de données. Pensez au nombre de fois qu'il faut accéder à la base de données à chaque fois qu'une page est consultée, puis réfléchissez au nombre de fois qu'il faut pour échanger une opération d'ajout. un panier (le nombre d'accès dépend principalement de la facilité d'utilisation du site Web), donc bien que modifier la conception ici puisse réduire une certaine pression sur la base de données, ce n'est pas ici un goulot d'étranglement. il n’est pas nécessaire d’y prêter trop d’attention.
Il est courant à l'heure actuelle que les marchandises dans le panier ne soient pas immédiatement déduites de l'inventaire. Il s'agit principalement d'empêcher quelqu'un d'occuper malicieusement les marchandises via le panier. De plus, une redondance est généralement accordée, car la plupart des marchandises sont stockées dans le panier. les marchandises dans le panier ne seront pas déduites du stock. Lors de la saisie de la commande finale réussie, vous ne devez pas laisser le panier affecter les ventes. L'inventaire est généralement déduit lorsque la commande est soumise avec succès.C'est-à-dire que lorsque l'utilisateur soumet la commande, vous avez une autre possibilité de rappeler à l'utilisateur qu'il n'y a pas d'inventaire, il n'est donc pas nécessaire de déduire l'inventaire lors de la commande dans le panier. Pour les commandes réussies, toutes les commandes soumises par les utilisateurs ne sont pas considérées comme des commandes réussies. Il existe un processus d'examen automatique des commandes, qui est difficile à écrire, mais il est en effet très important en fonction de l'analyse des données antérieures, du comportement des utilisateurs, de leur réputation, etc. Les données proviennent du système qui effectue automatiquement un examen de la commande en quelques minutes. L'intensité de l'examen est liée au secteur. Cela peut éliminer la plupart des fausses commandes, et certaines d'entre elles peuvent devoir être transférées vers un examen manuel. par le système de révision automatique.
Il existe ici une situation particulière. Pour certains produits spéciaux tels que les billets de concert, il peut y avoir une sélection de place en ligne. Dans ce cas, il devient plus utile de réserver une place après avoir placé le panier. immédiatement après avoir placé le panier, mais il sera automatiquement libéré s'il ne devient pas une véritable commande dans un certain délai, par exemple dix minutes. Bien qu'il ne puisse pas éliminer complètement l'occupation malveillante du siège, il peut résoudre la plupart des problèmes. De nos jours, les commandes réussies dans le secteur de la billetterie sont différentes de celles de la plupart des autres secteurs. Le critère pour juger du succès des commandes de sélection de sièges en ligne dans le secteur de la billetterie est de savoir si le paiement a été réussi, ce qui signifie qu'à moins de payer, vous ne pourrez rester que dix heures. minutes.
Question : 3. La relation entre les commandes, les détails de la commande et les paniers
Je pense que ce problème a peut-être toujours été un gros problème pour ce type de site Web ! Il y a deux jours, le professeur Chen du CSTP m'a interviewé au téléphone à ce sujet. J'étais très nerveux à ce moment-là et ma réponse à la question n'était pas très claire. En fait, ce problème n'est pas difficile à résoudre simplement : il y a deux tables, commandes et détails. Chaque colonne du tableau des commandes pointe vers la colonne correspondante dans le tableau des détails. La clé étrangère est le numéro de commande dans la table de commande.
Réponse : Cette question est relativement simple. La première consiste à la mettre dans le panier et à la traiter comme une commande. Dans cet état, la commande peut être modifiée et le panier est fusionné dans le système de commande (. faites attention à la gestion du statut de connexion et de non-connexion de l'utilisateur) ; la seconde consiste à avoir un tableau de panier séparé lorsque la commande est finalement soumise, les informations du panier sont copiées dans le tableau des détails de la commande. Cette dernière est plus couramment utilisée et le choix spécifique dépend du secteur et des caractéristiques du produit.
Question : 4. Comment générer le numéro de commande dans la liste détaillée ?
Cette question est héritée de la question 3. Je ne sais toujours pas comment résoudre ce problème. J'ai deux solutions, l'une consiste à utiliser un déclencheur et l'autre à programmer. Le premier ajoute un détail à chaque fois que le client met un produit dans le panier, génère une commande après confirmation de l'achat, et modifie le statut d'achat dans le tableau de détail pour déclencher le déclencheur et générer un numéro de commande (bien sûr, ce numéro de commande peut être soit la programmation dans le déclencheur peut également consister à définir une colonne du numéro de commande dans le tableau des commandes pour générer automatiquement un numéro de série). Ce dernier jugera le numéro de commande puis y ajoutera 1 pour générer un nouveau numéro de commande. Mais j'ai toujours l'impression que ces deux solutions sont très mauvaises, et j'aimerais savoir comment sont gérés les numéros de commande sur les sites marchands.
Réponse : Tout d’abord, je pense personnellement que la solution du déclencheur n’est pas conseillée. Je n’en expliquerai pas les raisons, sinon ce serait un gros désastre. Il existe également deux méthodes ici : l'une consiste à générer automatiquement des numéros à partir du tableau des commandes, lors de la génération d'une commande, l'écrire d'abord dans le tableau des commandes, puis à récupérer le numéro de commande, puis à mettre à jour le tableau des détails de la commande ; numéro de commande selon les règles commerciales. Lorsque le numéro de commande est connu, vous pouvez d'abord générer un enregistrement de commande ou un enregistrement détaillé, mais vous devez vous assurer que l'enregistrement détaillé doit avoir un enregistrement de commande à la fin, sinon il y aura un beaucoup de détails bizarres. Il existe deux méthodes pour cette dernière méthode : l'une est que le numéro de commande est généré par la base de données et une table temporaire est généralement utilisée. L'autre est que le numéro de série peut être utilisé de manière universelle dans toutes les entreprises. Le numéro est généré par un programme. Le GUID peut être utilisé lors de la génération du programme, mais une meilleure façon consiste à utiliser l'heure de la commande plus la valeur d'identification. La partie heure peut être basée sur la commande. La taille de la granularité est déterminée en fonction du volume. La partie d'identification est numérotée dans l'ordre. La granularité temporelle doit également être prise en compte pour empêcher les autres de compter grossièrement votre volume d'affaires (sueur~~~ C'est aussi un autre problème. Il y en a beaucoup). méthodes. Cela dépend de la situation. J'écrirai un autre jour quand j'aurai le temps. Écrivons un article sur la génération des numéros de commande, je répondrai à plusieurs en premier, donc j'ai probablement suffisamment d'informations...)