Phương pháp cơ sở dữ liệu hoặc phiên HTTP


16

Tôi bối rối một chút vì cách tiếp cận của tôi là gì, Làm việc trên một thiết kế giỏ hàng và tôi cần lưu trữ giỏ hàng trong phiên hoặc trong cơ sở dữ liệu nhưng không chắc cách tiếp cận nào là tốt nhất.

  1. Người dùng chưa đăng nhập và thêm sản phẩm vào giỏ hàng (Người dùng ẩn danh)
  2. Người dùng đã đăng nhập và thêm sản phẩm vào giỏ hàng.

Trường hợp đầu tiên khó hiểu hơn với tôi, vì có thể có nhiều trường hợp người dùng chỉ truy cập web-shop và thêm sản phẩm mà không đăng nhập và hoàn toàn có thể anh ta sẽ không thực hiện quy trình thanh toán.

Nhưng chúng ta vẫn cần tạo Giỏ hàng cho người dùng này, để tạo và lưu giỏ hàng tôi có hai tùy chọn.

  1. Khi người dùng thêm sản phẩm, hãy tạo một giỏ hàng trong cơ sở dữ liệu và liên kết giỏ hàng này với người dùng này, ngay lúc anh ta đăng nhập, hãy chuyển giỏ hàng này sang người dùng đã đăng nhập.
  2. Tạo Giỏ hàng, thêm sản phẩm vào đó và lưu nó vào Phiên, khi người dùng đăng nhập tạo Giỏ hàng trong cơ sở dữ liệu và người dùng đã đăng nhập với giỏ hàng này với Người dùng.

Tôi biết rằng cả hệ thống Cart điều khiển cơ sở dữ liệu cũng như Phiên dựa trên có thể có các khía cạnh tích cực cũng như tiêu cực, nhưng không chắc chắn cách nào có thể là cách tiếp cận tốt nhất để tính đến các điểm sau

  1. Khả năng mở rộng
  2. Uyển chuyển
  3. Khả năng mở rộng
  4. Ứng dụng nên chăm sóc tốc độ

Tìm kiếm đầu vào trên khía cạnh này để quyết định đường dẫn.


2
Tại sao? Tôi điều hành hàng trăm trang web thương mại điện tử và chúng tôi lưu trữ mọi thứ trong cookie hoặc localStorage (HTML5). Ngoài ra, phiên sử dụng hết bộ nhớ. Khi chúng tôi đăng nhập tài khoản, chúng tôi sử dụng cookie được mã hóa với dấu thời gian. Chúng tôi không cần phiên vì khi tải trang, chúng tôi sử dụng các kỹ thuật HTML5 để lưu trữ và sử dụng sessionStorage sau một lần tải. Đây là công nghệ web tiêu chuẩn tương thích IE8 +.
Jason Sebring

@LuiggiMendoza ok sao không.
Jason Sebring

@ zipstory.com: Tôi cũng muốn có một cái nhìn về giải pháp dựa trên HTML5, nhưng vì nó không được hỗ trợ bởi một vài trình duyệt, tôi hơi nghi ngờ
Umesh Awasthi

@UmeshAwasthi Tôi cho rằng khách hàng của mình không quan tâm đến một số ít người trên các trình duyệt thấp hơn nhưng rõ ràng đây là một cách tiếp cận tồi nếu đó là một trường hợp khác trong lưu lượng truy cập web của bạn. Tôi biết vẫn còn rất nhiều thế giới sử dụng XP trên IE7 và đôi khi là IE6 nhưng một số sản phẩm khách hàng của tôi được tìm thấy trong các cửa hàng như Nordstroms và Macy, v.v. và dường như không quan tâm đến điều đó.
Jason Sebring

@ zipstory.com: Tôi đang làm việc với một ứng dụng Thương mại điện tử nơi khách hàng muốn thậm chí hỗ trợ cho IE6, bây giờ bạn sẽ nói gì về nó :)
Umesh Awasthi

Câu trả lời:


9

Tôi sẽ đi đến một giải pháp trong đó một ID duy nhất được gán cho tất cả khách truy cập khi họ lần đầu tiên truy cập trang web. Không thành vấn đề nếu họ ẩn danh hoặc xác thực. Khi người dùng ẩn danh đăng ký, giữ lại ID duy nhất.

Lưu trữ giỏ hàng trong cơ sở dữ liệu. Dung lượng lưu trữ rẻ và không nên thực hiện một truy vấn cho giỏ hàng mỗi lần.


Khi tôi cần hiển thị trang chi tiết giỏ hàng thì sao? chúng ta nên lưu trữ / tìm nạp dữ liệu từ phiên hoặc truy cập cơ sở dữ liệu?
Umesh Awasthi

Nếu bạn lưu trữ các chi tiết giỏ hàng trong cơ sở dữ liệu, thì có, bạn sẽ cần phải nhấn cơ sở dữ liệu.
Jakob Gade

7

Cả hai phương pháp đều có ưu điểm và nhược điểm, nhưng theo tôi thấy, lưu trữ cơ sở dữ liệu có hai ưu điểm khá lớn.

  1. Báo cáo. Bạn không thể báo cáo về giỏ hàng bị bỏ rơi, tỷ lệ chuyển đổi, v.v. nếu dữ liệu có trong phiên.
  2. Thời gian chờ phiên. Tôi sẽ khó chịu nếu tôi đi ăn tối và quay lại và thấy giỏ hàng của tôi đã bị bỏ trống vì phiên hết hạn. Tôi sẽ tưởng tượng các nhà bán lẻ sẽ không thích điều đó. Chúng tôi muốn thúc đẩy người dùng mua, không phải từ bỏ và bỏ đi.

6

Câu hỏi là giả sử bạn cần tất cả các phiên mà trong thị trường khách hàng của tôi không cần thiết. Tôi tình cờ điều hành hàng trăm trang web thương mại điện tử và một số trong số họ đang có lưu lượng truy cập cao. Chúng tôi không sử dụng phiên bao giờ vì chúng không thể mở rộng trừ khi được trang trại thì chúng chỉ chậm hơn hoặc yêu cầu thiết lập nhiều hơn. Các phiên sử dụng hết bộ nhớ và cơ sở dữ liệu tìm nạp trạng thái phiên rất chậm và yêu cầu nhiều bộ phận chuyển động hơn.

Thay vào đó, chúng tôi sử dụng HTML5 sessionStorage để duy trì bất kỳ thông tin người dùng nào chúng tôi cần phải lặp đi lặp lại nhưng không cần phải bật lại cookie mỗi lần để tăng băng thông. Đây là IE8 + và tất cả các trình duyệt và thiết bị di động hiện đại khác đều tương thích với công nghệ này. NHƯNG bạn có thể dễ dàng lưu trữ giỏ hàng trong cookie như một dự phòng vì đây là những gì chúng tôi đã làm trước đây. Đây là một cookie-cart tốt: http://simplecartjs.org/

Khi người dùng đăng nhập hoặc đăng nhập, chúng tôi sử dụng cookie được mã hóa với dấu thời gian được nướng.

Chúng tôi cũng đang chuyển sang sử dụng ApplicationCache, nơi áp dụng sẽ làm giảm thêm lưu lượng truy cập web như một lưu ý phụ vì bạn có thể tìm nạp trước tài nguyên và thậm chí dữ liệu danh mục để phối cảnh người dùng sẽ là một trang web tải siêu nhanh và thiết bị di động cũng sẽ hoạt động ngoại tuyến (trừ giao dịch). Tất nhiên bạn phải cẩn thận để cập nhật bảng kê khai khi sản phẩm thay đổi, v.v.


4

Bạn đang giả định rằng lưu trữ phiên và lưu trữ cơ sở dữ liệu là độc quyền. Họ không. Nhưng hãy bắt đầu bằng cách giả sử chúng là.

Lợi thế của việc lưu trữ phiên là ba lần:

  1. Không cần phải chèn dữ liệu vào cơ sở dữ liệu. Bạn chỉ cần đặt một biến phiên và bạn đã hoàn tất. Đơn giản và ít rủi ro về chức năng.
  2. Không cần quản lý vòng đời của người dùng ghé thăm và giỏ hàng vì các container / khung làm việc đó cho bạn
  3. Thông thường tự động dọn dẹp các phiên nhàn rỗi cũ được thực hiện cho bạn.

Nhược điểm của lưu trữ phiên:

  1. Mối quan hệ phiên, trừ khi bạn điều tra nhân rộng
  2. Không có chuyển đổi dự phòng, trừ khi bạn điều tra sao chép hoặc lưu giữ thủ công trạng thái phiên vào đĩa, điều này có thể trở nên phức tạp.
  3. Tất cả các phiên phải được lưu trữ trong bộ nhớ. Điều này được khuếch đại nếu bạn sử dụng nhân rộng.

Ưu điểm của lưu trữ cơ sở dữ liệu:

  1. Không cần phải lo lắng về mối quan hệ phiên hoặc nhân rộng nhà nước. Bạn có thể làm tròn tất cả các yêu cầu.
  2. Ít bộ nhớ trong ứng dụng.
  3. Nếu đơn hàng được hoàn thành, mọi thứ sẽ kết thúc trong cơ sở dữ liệu, vì vậy điều này có thể giúp việc hoàn thành dễ dàng vì dữ liệu đã có sẵn.

Nhược điểm của lưu trữ cơ sở dữ liệu:

  1. Giỏ hàng bị bỏ rơi - một số người dùng ẩn danh đã thêm một mặt hàng vào giỏ hàng của họ và biến mất. Dữ liệu đó tồn tại mãi mãi trừ khi bạn có một số quy trình hết hạn.
  2. Bạn cần đưa ra một cách để theo dõi người dùng và tìm hiểu xem, đối với một yêu cầu nhất định, điều này thể hiện một phiên duyệt web hiện có hay mới. (vâng, điều này có thể dễ dàng nếu bạn sử dụng cookie, nhưng làm thế nào để bạn đảm bảo hai người dùng không kết thúc với cùng một id?).
  3. Thêm mã

Bạn đã không đề cập đến nền tảng bạn đang sử dụng. Tôi sẽ tìm kiếm một cách tiếp cận sử dụng phiên dựa trên cơ sở dữ liệu trong đó dữ liệu phiên chỉ tồn tại trong bộ nhớ trong vòng đời của chu kỳ yêu cầu / phản hồi, tải nó từ cơ sở dữ liệu và lưu lại vào cơ sở dữ liệu. Điều này đã phục vụ tôi tốt trong quá khứ.

Ưu điểm của phiên hỗ trợ cơ sở dữ liệu:

  1. Không cần mối quan hệ máy chủ.
  2. Dễ dàng trên bộ nhớ máy chủ ứng dụng
  3. Dữ liệu phiên nhàn rỗi / bị bỏ rơi được dọn sạch cho bạn.
  4. Vòng đời của người dùng truy cập đầu tiên, truy cập lặp lại, kết thúc phiên là tất cả đã được tìm ra cho bạn.
  5. Dễ mã

Nhược điểm của phiên hỗ trợ cơ sở dữ liệu:

  1. Cấu hình - bạn cần điều tra vùng chứa của mình, cho dù đó là PHP, Java EE (Tomcat, Jetty, JBoss, v.v.), node.js + express.js hay không hỗ trợ điều này và cung cấp cấu hình đúng.
  2. Bạn có thể cần tải thử nghiệm này vì bạn đang thêm 2 thao tác cơ sở dữ liệu cho mỗi yêu cầu.

Có một khả năng thứ ba, mà ai đó đã chạm vào trước đó. Bạn có thể bỏ qua việc sử dụng các phiên hoàn toàn và sử dụng bộ nhớ phía máy khách bằng cách nhúng mọi thứ vào bộ nhớ trong cookie hoặc html.

Tôi sẽ để lại những ưu / nhược điểm của nó như là một bài tập cho bạn, nhưng tôi sẽ cho bạn một gợi ý rằng đối với lưu trữ html5, khả năng tương thích trình duyệt có thể là điều cần xem xét cẩn thận.

Tôi đã phác thảo sự thật cho bạn. Hy vọng rằng điều này sẽ giúp bạn đưa ra quyết định đúng đắn cho tình huống của bạn.


Bạn đã bỏ lỡ một lợi thế của việc lưu trữ cơ sở dữ liệu, ngay lập tức tổ chức để phân tích tỷ lệ mua của những thứ được đặt trong giỏ hàng.
HLGEM

@HLGEM Ý tưởng tuyệt vời - Tôi chưa bao giờ nghĩ về điều đó!
Brandon

Tôi nghĩ về công cụ này bởi vì tôi là người phân tích dữ liệu trong cơ sở dữ liệu. Khi thiết kế cơ sở dữ liệu, một trong những câu hỏi đầu tiên là chúng ta sẽ cần dữ liệu này để làm gì và hầu như không ai hỏi nó.
HLGEM

3

Hãy để chúng tôi xem xét hai trường hợp sử dụng bạn đã đề cập

Người dùng chưa đăng nhập và thêm sản phẩm vào giỏ hàng (Người dùng ẩn danh)

Trong trường hợp này, bạn chắc chắn muốn lưu thông tin giỏ hàng của người dùng trong một phiên để phục vụ người dùng tốt trong phiên của họ. Nếu anh ấy / cô ấy quyết định đăng nhập / tạo tài khoản, bạn có thể xử lý việc này dựa trên trường hợp sử dụng tiếp theo. Nếu anh ấy / cô ấy không đăng nhập, bạn không cần điền vào cơ sở dữ liệu của mình thông tin người dùng này vì nó chỉ được sử dụng để phục vụ khách trong phiên. Dữ liệu này có thể được xử lý trên cơ sở Không quốc tịch, tức là không phải trạng thái không được lưu từ phiên này sang phiên khác.

Người dùng đã đăng nhập và thêm sản phẩm vào giỏ hàng.

Trong trường hợp này, bạn có thể xử lý nó giống như trên (các trang web thương mại điện tử trường học cũ) và cũng có thể thêm thông tin này vào cơ sở dữ liệu và liên kết nó với người dùng. Điều này chủ yếu được sử dụng để cung cấp thông tin trạng thái (trạng thái được lưu từ phiên này sang phiên khác) như "Lịch sử duyệt sản phẩm", "Khuyến nghị", v.v., tương tự như Amazon.com.

Những điều cần suy nghĩ:

  • Có cần thiết phải lưu dữ liệu?
  • Nếu có, dữ liệu nào quan trọng nhất sẽ được lưu để phục vụ người dùng tốt hơn?
  • Khả năng mở rộng + lưu trữ dữ liệu - Làm thế nào bạn sẽ lưu thông tin giỏ hàng để tra cứu nhanh trong cơ sở dữ liệu của bạn để hỗ trợ nhiều người dùng?

3
Nó cũng giúp công ty phân tích doanh số. Làm thế nào thường là một sản phẩm đặt trong một giỏ hàng nhưng không mua. Nếu tỷ lệ phần trăm cao, thì họ có thể muốn xem cách trình bày sản phẩm hoặc giá để xem các thay đổi có thể giúp đưa ra tỷ lệ mua hàng hay không. Việc tiết kiệm cũng có thể cho phép người dùng nhìn thấy những món đồ đó một cách nhanh chóng nếu anh ta không đặt hàng vào ngày anh ta nhìn thay vì tìm kiếm lại chúng. Vì vậy, có thể bạn đặt chúng vào giỏ hàng của bạn nhưng muốn đợi đến ngày mai (ngày trả tiền) để thực sự mua chúng. Vì vậy, việc lưu dữ liệu có thể dẫn đến việc khách hàng thực sự của bạn mua nhiều thứ hơn.
HLGEM

Nhưng cuối cùng, đây là một vấn đề định nghĩa yêu cầu và bạn nên nói với doanh nghiệp của bạn những gì bạn dự định làm và đảm bảo đó là những gì họ mong đợi trước khi bạn xây dựng bất cứ điều gì.
HLGEM

Nhắc nhở bạn cần suy nghĩ về việc đặt hàng và giỏ hàng từ góc độ của những gì doanh nghiệp có thể cần dữ liệu cho tương lai. Nếu họ muốn phân tích dữ liệu, tốt nhất là lưu trữ nó. Các nhà phát triển bị treo giao diện người dùng và quên mục đích lưu trữ dữ liệu khi lưu trữ.
HLGEM

@HLGEM: Điểm rất tốt! Tôi đã trả lời câu hỏi này chỉ dựa trên nhu cầu hỗ trợ chức năng xe hơi cho người dùng khách so với thành viên trang web. Từ quan điểm kinh doanh, cần có một hệ thống thống kê riêng phụ thuộc vào một số loại hệ thống cơ sở dữ liệu theo dõi (các) sản phẩm về mặt địa lý, # người dùng, sản phẩm liên quan, mua so với loại bỏ, v.v.
GeekByte

0

Chuyển sang phiên khi người dùng chưa đăng nhập. Ngay cả khi đăng nhập, hãy tạo giỏ hàng trong phiên trước và duy trì nó vào cơ sở dữ liệu khi người dùng đăng xuất hoặc hết phiên.

Bạn cần kiểm tra số lượng xe được tạo trong phiên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.