Acabei de ver algumas ideias sobre carrinhos de compras do colega Wu Lei. Estou familiarizado com esse aspecto do comércio eletrônico, então saltei para mostrar minha vergonha. Originalmente, eu queria responder o seguinte, mas acontece que é preciso muito para escrever, então é melhor escrever aqui. Será mais fácil encontrá-lo sozinho no futuro : 1. Deveria . os dados do carrinho de compras serão armazenados no banco de dados?
Quero especialmente saber como os engenheiros de software reais pensam sobre esse problema em projetos reais. Depois de pesquisar no Google, encontrei um artigo de um internauta em nosso jardim: O carrinho de compras deveria ser um módulo para armazenamento temporário de dados, e ele os armazenou no objeto Session. O que este internauta disse faz sentido, mas não gosto dessa abordagem. Se todos o armazenarem no objeto Session e milhares de usuários comprarem juntos, o servidor ASP.NET certamente suportará uma carga enorme. Talvez nossos sites domésticos sejam melhores, mas como fazemos isso para sites como o Amazon? O site da Amazon China, que é o site da Joyo, não o armazena no objeto Session, pois se eu não enviar um pedido dos produtos que coloquei no carrinho de compras desta vez, esses produtos ainda estarão no carrinho de compras após o login na próxima vez. Então pensei que eles poderiam estar colocando os dados desses carrinhos de compras em um banco de dados.
Resposta: Armazenar o carrinho de compras na Sessão parece existir apenas na elaboração de cursos em universidades ou em alguns projetos de estágio com os quais ninguém se importa. Na verdade, quase todos os sites de comércio eletrônico armazenam dados do carrinho de compras no banco de dados. Aqui estão algumas explicações e considerações de design:
1. A sessão não é adequada para armazenar grandes quantidades de dados. Quando há muitos usuários, isso afetará inevitavelmente o desempenho do servidor, o que deve ser evitado.
2. Existe um problema de perda acidental de Sessão, ou quando o usuário fecha acidentalmente o navegador, todos os itens do carrinho de compras serão perdidos, resultando em uma experiência de usuário muito ruim.
3. Os cookies podem resolver o problema da sessão no item acima, mas devido ao limite de comprimento dos cookies, à sobrecarga de comunicação ao usar cookies e a considerações de segurança, os cookies não são adequados para carrinhos de compras.
4. Uma melhor experiência do usuário é que, independentemente de o usuário estar logado ou não, o status do carrinho de compras pode ser registrado dentro de um determinado período de tempo. Isso exige que o carrinho de compras no banco de dados não possa ser vinculado ao usuário.
5. Os produtos colocados no carrinho de compras são geralmente produtos com intenção de compra, mas podem não necessariamente se tornar pedidos reais. Neste momento, a retenção desses dados desempenha um papel vital na mineração de dados e na análise de negócios.
Pergunta: 2. Sobre simultaneidade?
Acontece que, quando eu estava desenvolvendo meu próprio site simulado, uma vez pensei nesta questão: se um cliente colocar alguns livros no carrinho de compras do site, esse número de livros deve ser subtraído do estoque? Foi isso que eu fiz. Eu subtraio a quantidade dos livros correspondentes no carrinho de compras do banco de dados para evitar que outros usuários vejam a quantidade falsa do estoque neste momento (se não for subtraído, outros usuários poderão comprá-lo. Por exemplo: o número de livros em o estoque é 10 deste livro, o cliente A coloca 10 cópias em seu carrinho de compras, e o cliente B também coloca 10 cópias em seu carrinho de compras, então quem vai comprar este livro se tornará um conflito). Porém, o resultado disso é que toda vez que um cliente atualizar o carrinho de compras, haverá uma comunicação com o banco de dados, o que aumenta a carga no servidor de dados. Amazon.cn não está indo muito bem nesse aspecto. Há alguns dias, acredito que você pode ter encontrado o problema de que, ao comprar o livro "Compreensão aprofundada de sistemas operacionais", você originalmente fez um pedido, mas foi informado. que estava esgotado no dia seguinte. Este incidente realmente afetou muito a credibilidade da Amazon.cn. Não sei se o sistema deles resolveu esse problema agora, mas o preço Joyo do livro "Compreensão aprofundada dos sistemas operacionais" não é o que costumava ser. . Não sei como os especialistas resolveram esse problema. Você pode escrever sua experiência de sucesso nos comentários.
Resposta: Em primeiro lugar, vamos falar sobre a carga do servidor de banco de dados. Pense em quantas vezes o banco de dados precisa ser acessado toda vez que uma página é acessada e, em seguida, pense em quantas vezes é necessário trocar por uma operação de adição. um carrinho de compras (o número de acessos depende principalmente da facilidade de uso do site, esse é outro assunto), portanto, embora modificar o design aqui possa reduzir um pouco a pressão do banco de dados, não é um gargalo aqui. não há necessidade de prestar muita atenção aqui.
Atualmente, é uma prática comum que as mercadorias no carrinho de compras não sejam imediatamente deduzidas do estoque. Isso ocorre principalmente para evitar que alguém ocupe maliciosamente as mercadorias através do carrinho de compras. Além disso, geralmente é dada uma redundância. as mercadorias no carrinho de compras não serão deduzidas do estoque. Ao inserir o pedido final com sucesso, você não deve permitir que o carrinho de compras afete as vendas. O estoque geralmente é deduzido quando o pedido é enviado com sucesso. Ou seja, quando o usuário envia o pedido, você tem outra oportunidade de lembrar ao usuário que não há estoque, portanto não há necessidade de deduzir o estoque ao fazer o pedido no. carrinho de compras. Para pedidos bem-sucedidos, nem todos os pedidos enviados pelos usuários são considerados pedidos bem-sucedidos. Existe um processo automático de revisão de pedidos. Este programa é difícil de escrever, mas é realmente muito importante com base na análise de dados anterior, no comportamento do usuário, na reputação do usuário, etc. Os dados vêm do sistema que conclui automaticamente uma revisão do pedido em poucos minutos. A intensidade da revisão está relacionada ao setor. Isso pode eliminar a maioria dos pedidos falsos e alguns deles podem ter que ser transferidos para revisão manual. pelo sistema de revisão automática.
Existe aqui uma situação especial. Para alguns produtos especiais, como bilhetes para concertos, pode haver seleção de lugares online. Neste caso, torna-se mais útil reservar um lugar depois de colocar o carrinho de compras. imediatamente após colocar o carrinho de compras, mas será liberado automaticamente se não se tornar um pedido real dentro de um determinado período de tempo, como dez minutos. Embora não possa eliminar completamente a ocupação maliciosa de assentos, pode resolver a maioria dos problemas. Hoje em dia, os pedidos bem-sucedidos na emissão de bilhetes são diferentes da maioria dos outros setores. O critério para julgar os pedidos de seleção de assentos on-line bem-sucedidos no setor de emissão de bilhetes é se o pagamento foi bem-sucedido, o que significa que, a menos que você pague, só poderá ficar por dez. minutos.
Pergunta: 3. A relação entre pedidos e detalhes de pedidos e carrinhos de compras
Acho que esse problema sempre foi um grande problema para esse tipo de site! Há dois dias, o professor Chen do CSTP me entrevistou por telefone sobre esta questão. Eu estava muito nervoso na época e minha resposta à pergunta não foi muito clara. Na verdade, esse problema não é difícil de pensar de forma simples: existem duas tabelas, pedidos e detalhes. Cada coluna na tabela de pedidos aponta para a coluna correspondente na tabela de detalhes. A chave estrangeira é o número do pedido na tabela de pedidos.
Resposta: Esta questão é relativamente simples. Uma delas é colocá-lo no carrinho de compras e tratá-lo como um pedido. Nesse estado, o pedido pode ser modificado e o carrinho de compras é mesclado no sistema de pedidos. preste atenção ao tratamento do status de login e não login do usuário); a segunda é ter uma tabela de carrinho de compras separada. Quando o pedido for finalmente enviado, as informações no carrinho de compras serão copiadas para a tabela de pedidos e detalhes do pedido. Este último é mais comumente usado e a escolha específica depende da indústria e dos atributos do produto.
Pergunta: 4. Como gerar o número do pedido na lista detalhada?
Esta questão é herdada da questão 3. Ainda não sei como resolver este problema. Tenho duas soluções, uma é usar trigger e a outra é programar. O primeiro adiciona um detalhe cada vez que o cliente coloca um produto no carrinho de compras, gera um pedido após a confirmação da compra e altera o status da compra na tabela de detalhes para acionar o gatilho e gerar um número de pedido (claro, esse número de pedido pode ser Programar no gatilho também pode ser definir uma coluna do número do pedido na tabela de pedidos para gerar automaticamente um número de série). Este último julgará o número do pedido e então adicionará 1 para gerar um novo número de pedido. Mas sempre achei que essas duas soluções são muito ruins e gostaria de saber como são tratados os números dos pedidos em sites comerciais.
Resposta: Em primeiro lugar, pessoalmente acho que a solução de gatilho não é aconselhável, não vou explicar os motivos, caso contrário será uma grande bagunça. Existem também dois métodos aqui. Um é gerar números automaticamente a partir da tabela de pedidos. Ao gerar um pedido, primeiro escreva-o na tabela de pedidos, depois recupere o número do pedido e, em seguida, atualize a tabela de detalhes do pedido; número do pedido de acordo com as regras de negócios Quando o número do pedido for conhecido, você pode gerar um registro de pedido ou um registro detalhado primeiro, mas deve garantir que o registro detalhado deve ter um registro de pedido no final, caso contrário, haverá um. muitos detalhes estranhos. Existem dois métodos para o último método. Um é que o número do pedido é gerado pelo banco de dados e geralmente é usada uma tabela temporária. A vantagem é que o número de série pode ser usado universalmente em todos os negócios. O número é gerado por um programa pode ser usado ao gerar o programa, mas uma maneira melhor é usar o tempo do pedido mais o valor de identificação. O tamanho da granularidade é determinado com base no volume. A parte de identificação é numerada em ordem. A granularidade do tempo também deve ser considerada para evitar que outros contem aproximadamente o volume do seu negócio (suor ~~~ Este também é outro problema. Existem muitos. métodos. Depende da situação. Escreverei outro dia quando tiver tempo. Vamos escrever um artigo sobre geração de números de pedido, então provavelmente terei informações suficientes...)