Acabo de ver algunas ideas sobre carritos de compras de mi compañero de clase Wu Lei. Estoy familiarizado con este aspecto del comercio electrónico, así que salté para mostrar mi vergüenza y espero que sea de alguna utilidad para algunos colegas. Originalmente quería responder a lo siguiente, pero resulta que se necesita mucho para escribir, así que también podría escribirlo aquí. Será más fácil encontrarlo yo mismo en el futuro. Preguntas: 1. Debería . ¿Se almacenarán los datos del carrito de compras en la base de datos?
Especialmente quiero saber cómo piensan los ingenieros de software reales sobre este problema en proyectos reales. Después de buscar en Google, encontré un artículo de un internauta en nuestro jardín: El carrito de compras debería ser un módulo para almacenar datos temporalmente, y él los almacenó en el objeto Sesión. Lo que dijo este internauta tiene sentido, pero no me gusta este enfoque. Si todos lo almacenan en el objeto Sesión y miles de usuarios compran juntos, el servidor ASP.NET definitivamente soportará una carga enorme. Quizás nuestros sitios web nacionales sean mejores, pero ¿cómo hacemos esto para sitios web como Amazon? El sitio web de Amazon China, que es el sitio web de Joyo, no lo almacena en el objeto Sesión, porque si no envío un pedido de los productos que puse en el carrito de compras esta vez, estos productos seguirán en el carrito de compras después de iniciar sesión. en la próxima vez. Entonces pensé que podrían estar poniendo los datos de esos carritos de compras en una base de datos.
Respuesta: Guardar el carrito de compras en la Sesión parece existir solo en el diseño de cursos en universidades o en algunos proyectos de pasantías que a nadie le importan. De hecho, casi todos los sitios web de comercio electrónico almacenan datos del carrito de compras en la base de datos. Aquí hay algunas explicaciones y consideraciones de diseño:
1. La sesión no es adecuada para almacenar grandes cantidades de datos. Cuando hay muchos usuarios, inevitablemente afectará el rendimiento del servidor, lo que debe evitarse.
2. Existe un problema de pérdida accidental de la sesión, o cuando el usuario cierra accidentalmente el navegador, todos los artículos del carrito de compras se perderán, lo que resultará en una muy mala experiencia de usuario.
3. Las cookies pueden resolver el problema de sesión en el elemento anterior, pero debido al límite de longitud de las cookies, la sobrecarga de comunicación al usar cookies y consideraciones de seguridad, las cookies no son adecuadas para carritos de compras.
4. Una mejor experiencia de usuario es que, independientemente de si el usuario ha iniciado sesión o no, el estado del carrito de compras se puede registrar dentro de un cierto período de tiempo. Esto requiere que el carrito de compras en la base de datos no pueda vincularse al usuario.
5. Los productos colocados en el carrito de compras generalmente son productos con intención de compra, pero es posible que no necesariamente se conviertan en pedidos reales. En este momento, conservar estos datos juega un papel vital en la extracción de datos y el análisis comercial.
Pregunta: 2. ¿Acerca de la concurrencia?
Resulta que cuando estaba desarrollando mi propio sitio web simulado, una vez pensé en esta pregunta: si un cliente pone algunos libros en el carrito de compras del sitio web, ¿debería restarse esa cantidad de libros del inventario? Eso es lo que hice. Resto la cantidad de libros correspondientes en el carrito de compras de la base de datos para evitar que otros usuarios vean la cantidad de inventario falsa en este momento (si no se resta, entonces otros usuarios pueden comprarlo. Por ejemplo: la cantidad de libros en el inventario es 10 de este libro, el cliente A pone 10 copias en su carrito de compras y el cliente B también pone 10 copias en su carrito de compras, entonces quién comprará este libro se convertirá en un conflicto). Sin embargo, el resultado de esto es que cada vez que un cliente actualiza el carrito de compras, habrá una comunicación con la base de datos, lo que aumenta la carga sobre el servidor de datos. A Amazon.cn no le está yendo muy bien en este sentido Hace unos días, creo que es posible que haya encontrado el problema de que cuando compró el libro "Comprensión profunda de los sistemas operativos", originalmente realizó un pedido, pero se le informó. que estaba agotado al día siguiente. De hecho, este incidente ha afectado en gran medida la credibilidad de Amazon.cn. No sé si su sistema ha resuelto este problema ahora, pero el precio de Joyo del libro "Comprensión profunda de los sistemas operativos" no es el que solía ser. . No sé cómo los expertos resolvieron este problema. Puedes escribir tu experiencia exitosa en los comentarios.
Respuesta: En primer lugar, hablemos de la carga sobre el servidor de la base de datos. Piense en cuántas veces es necesario acceder a la base de datos cada vez que se accede a una página, y luego piense en cuántas veces se necesita cambiar por una operación de adición. un carrito de compras (la cantidad de accesos depende principalmente de la facilidad de uso del sitio web Diseño, este es otro tema), por lo que aunque modificar el diseño aquí puede reducir parte de la presión de la base de datos, no es un cuello de botella aquí. No hay necesidad de prestar demasiada atención aquí.
En la actualidad, es una práctica común que los bienes en el carrito de compras no se deduzcan inmediatamente del inventario. Esto es principalmente para evitar que alguien ocupe maliciosamente los bienes a través del carrito de compras. Además, generalmente se otorga una redundancia, porque la mayoría de ellos. Los productos en el carrito de compras no se deducirán del stock. Al ingresar el pedido final exitoso, no debe permitir que el carrito de compras afecte las ventas. El inventario generalmente se deduce cuando el pedido se envía correctamente. Es decir, cuando el usuario envía el pedido, tiene otra oportunidad para recordarle que no hay inventario, por lo que no es necesario deducir el inventario al realizar el pedido. carro de la compra. Para pedidos exitosos, no todos los pedidos enviados por los usuarios se consideran pedidos exitosos. Existe un proceso de revisión automática de pedidos. Este programa es difícil de escribir, pero de hecho es muy importante según el análisis de datos previo, el comportamiento del usuario, la reputación del usuario, etc. Los datos provienen del sistema que completa automáticamente una revisión del pedido en unos minutos. La intensidad de la revisión está relacionada con la industria. Esto puede eliminar la mayoría de los pedidos falsos y es posible que algunos de ellos deban transferirse a revisión manual. por el sistema de revisión automática.
Aquí existe una situación especial para algunos productos especiales, como entradas para conciertos, es posible que exista una selección de asientos en línea. En este caso, resulta más útil reservar un asiento después de colocar el carrito de compras. inmediatamente después de realizar el carrito de compras, pero se liberará automáticamente si no se convierte en un pedido real dentro de un cierto período de tiempo, como diez minutos. Aunque no puede eliminar por completo la ocupación maliciosa del asiento, puede resolver la mayoría de los problemas. Hoy en día, los pedidos exitosos en la venta de boletos son diferentes de la mayoría de las otras industrias. El criterio para juzgar los pedidos exitosos de selección de asientos en línea en la industria de la venta de boletos es si el pago se ha realizado correctamente, lo que significa que, a menos que pague, solo podrá quedarse diez días. minutos.
Pregunta: 3. La relación entre los pedidos y los detalles del pedido y los carritos de compras.
¡Creo que este problema siempre ha sido un gran problema para este tipo de sitio web! Hace dos días, el profesor Chen de CSTP me entrevistó por teléfono sobre esta pregunta. En ese momento estaba muy nervioso y mi respuesta a la pregunta no fue muy clara. De hecho, no es difícil pensar en este problema: hay dos tablas, pedidos y detalles. Cada columna de la tabla de pedidos apunta a la columna correspondiente en la tabla de detalles. La clave externa es el número de pedido en la tabla de pedidos.
Respuesta: Esta pregunta es relativamente simple. Una es colocarla en el carrito de compras y tratarla como un pedido. En este estado, el pedido se puede modificar y el carrito de compras se fusiona con el sistema de pedidos. preste atención al manejo del estado de inicio de sesión y no inicio de sesión); el segundo es tener una tabla de carrito de compras separada cuando finalmente se envía el pedido, la información del carrito de compras se copia en la tabla de pedidos y detalles del pedido. Este último se usa más comúnmente y la elección específica depende de la industria y los atributos del producto.
Pregunta: 4. ¿Cómo generar el número de pedido en la lista detallada?
Esta pregunta se hereda de la pregunta 3. Todavía no sé cómo solucionar este problema. Tengo dos soluciones, una es usar un disparador y la otra es programar. El primero agrega un detalle cada vez que el cliente agrega un producto al carrito de compras, genera un pedido después de confirmar la compra y cambia el estado de la compra en la tabla de detalles para activar el disparador y generar un número de pedido (por supuesto, este número de pedido). Puede ser Programar en el disparador también puede ser establecer una columna del número de pedido en la tabla de pedidos para generar automáticamente un número de serie). Este último juzgará el número de pedido y luego le agregará 1 para generar un nuevo número de pedido. Pero siempre siento que estas dos soluciones son muy malas y me gustaría saber cómo se manejan los números de pedido en los sitios web comerciales.
Respuesta: En primer lugar, personalmente creo que la solución desencadenante no es aconsejable. No explicaré los motivos, de lo contrario será un gran desastre. También hay dos métodos aquí. Uno es generar números automáticamente a partir de la tabla de pedidos. Al generar un pedido, primero escríbalo en la tabla de pedidos, luego recupere el número de pedido y luego actualice la tabla de detalles del pedido; número de pedido de acuerdo con las reglas comerciales Cuando se conoce el número de pedido, primero puede generar un registro de pedido o un registro de detalle, pero debe asegurarse de que el registro de detalle debe tener un registro de pedido al final, de lo contrario habrá un registro de pedido. muchos detalles extraños. Hay dos métodos para el último método: uno es que el número de pedido lo genera la base de datos y generalmente se usa una tabla temporal. La ventaja es que el número de serie se puede usar universalmente en todas las empresas. El número es generado por un programa. El GUID se puede usar al generar el programa, pero una mejor manera es usar el tiempo del pedido más el valor de identificación. La parte del tiempo puede basarse en el pedido. El tamaño de la granularidad se determina en función del volumen. La parte de identificación está numerada en orden. La granularidad del tiempo también debe considerarse para evitar que otros cuenten aproximadamente el volumen de su negocio (sudor ~~~ Este también es otro problema. Hay muchos). métodos. Depende de la situación. Escribiré otro día cuando tenga tiempo. Escribamos un artículo sobre la generación de números de pedido. Responderé a muchos primero, así que probablemente tenga suficiente información...)