2010-07-11 32 views
7

Vì vậy, ví dụ, người dùng đang đăng nhập và hệ thống lưu trữ thông tin về họ ví dụ: birth date, do đó, nhanh hơn để lấy thông tin này từ phiên hoặc truy vấn cơ sở dữ liệu cho nó? Ý tưởng của tôi là, người dùng chỉ cần đăng nhập một lần và phiên luôn ở đó, nhưng nếu tôi truy vấn cơ sở dữ liệu, thì nếu người dùng tải lại trang, hệ thống cần truy vấn lại, thay vì nhận được dữ liệu từ 'địa điểm' tạm thời.Các phiên có nhanh hơn truy vấn cơ sở dữ liệu không?

Tôi sử dụng PHP và MySQL.

+0

Bạn sử dụng ngôn ngữ lập trình và dbms nào? –

+0

Tôi đã chỉnh sửa câu trả lời của mình. – Adam

Trả lời

9

Đối với hầu hết mọi ngôn ngữ và cơ sở dữ liệu, vâng. Một phiên người dùng thường chỉ được lưu trữ trong bộ nhớ, và nhận được một tổ chức của nó chỉ là vấn đề tìm kiếm nó lên. Một truy cập cơ sở dữ liệu thường liên quan đến một số giao tiếp socket với một quá trình khác. Thay vì nặng so sánh.

+2

Theo như tôi biết, các phiên trong PHP được lưu trữ trong các tập tin theo mặc định, không phải trong bộ nhớ. Đối với mỗi hit tập tin phiên này phải được đọc từ hệ thống tập tin và phân tích thành mảng PHP. Bạn nói đúng, phiên phải nhanh hơn nhưng lý do là - bạn phải tải dữ liệu phiên của người dùng vì các lý do khác và birtday mà anh ta nói đến sẽ ở đó - không cần hỏi cơ sở dữ liệu. – dwich

1

Bạn đang làm tất cả như thế nào? Cách làm là kiểm tra thông tin đăng nhập của người dùng tại trang đăng nhập và có, bạn phải thực hiện truy vấn để kiểm tra xem người dùng đã chỉ định tiêu chí có phù hợp trong cơ sở dữ liệu hay không. Nếu họ làm, bạn lưu trữ chúng trong phiên và sau đó bạn tiếp tục dựa trên phiên đó.

Vì vậy, nó không phải là về so sánh, bạn phải thực hiện để truy vấn cơ sở dữ liệu một lần tại trang đăng nhập và sử dụng phiên sau đó.

Đăng nhập Trang

// database query run once only at this page 
// if user exits, you store it into session else redirect with an error message 
+0

Tôi biết cách thực hiện, câu hỏi của tôi nhanh hơn truy vấn cơ sở dữ liệu hay không :) – Adam

+1

@CIRK: Tất nhiên, phiên làm việc nhanh hơn nhưng bạn cũng phải tính đến bảo mật. – Sarfraz

+0

Cảm ơn bảo mật là một chủ đề hoàn toàn mới, cảm ơn vì đã nói, tôi đã tạo một câu hỏi mới để kiểm tra: http: //stackoverflow.com/questions/3224286/php-what-are-the-risks-of-php-sessions – Adam

0

Trên thực tế, câu trả lời của Carl không phải là hoàn toàn đúng, và nói rằng "MySql" không giúp được gì.

Bạn thấy đấy, các hệ thống cơ sở dữ liệu như mysql có "công cụ lưu trữ". Chúng thường ghi vào các tệp, nhưng có một số ghi vào bộ nhớ (MEMORY), một số khác ghi bộ nhớ nhưng giữ một tệp sao lưu (MyISAM) và một vài thành/dev/null (BLACKHOLE).

Vì vậy, tất cả phụ thuộc vào công cụ lưu trữ:

  • MyISAM - engine mặc định như của MySQL 3.23 với hiệu suất tuyệt vời
  • NHỚ - Hash dựa, được lưu trữ trong bộ nhớ, hữu ích cho các bảng tạm thời
  • InnoDB - Hỗ trợ các giao dịch, hàng cấp khóa, và các phím nước ngoài
  • BerkeleyDB - Hỗ trợ các giao dịch và trang cấp khóa
  • Blackhole -/dev/công cụ lưu trữ null (bất cứ điều gì bạn viết thư cho nó biến mất)
  • VÍ dỤ - công cụ lưu trữ Ví dụ
  • lƯU tRỮ - công cụ lưu trữ lưu trữ
  • CSV - công cụ lưu trữ CSV
  • ndbcluster - Clustered,, bảng dựa trên bộ nhớ fault-tolerant
  • FEDERATED - Federated MySQL công cụ lưu trữ
  • MRG_MYISAM - Bộ sưu tập các bảng MyISAM giống hệt
  • ISAM - công cụ lưu trữ cũ

(danh sách từ danh sách Ví dụ về PhpMyAdmin)

+0

vì vậy nếu tôi sử dụng 'MEMORY', nó sẽ hoạt động giống như' SESSION'? – Adam

+0

"câu trả lời" này bổ sung tốt nhất và không giải quyết được câu hỏi. – rvdavid

+0

@rvdavid - Nó giải quyết câu hỏi, OP chỉ cần chọn một tùy chọn. – Christian

Các vấn đề liên quan