Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Variabel Sesi:Berapa banyak data yang terlalu banyak?

Pertama, sesi PHP tidak disimpan dalam memori secara default , mereka disimpan di disk, jadi setiap blok/sesi yang Anda tulis akan menempati ruang disk dan bukan memori (sampai Anda menggunakan PHP untuk membaca data sesi).

Ya, Anda berpotensi menjadi lebih efisien, tetapi tidak jika Anda ingin meningkatkan skala dan inilah alasannya:


Menyimpan data dalam sesi

Sangat dapat diterima untuk menyimpan beberapa data dalam sesi. Secara teoritis, tidak ada batasan (walaupun saya belum pernah mencoba mendobraknya atau bahkan mendorongnya, pindah saja ke solusi yang lebih efisien). Namun Anda akan dibatasi oleh ruang disk dan PHP memory_limit() .

Seringkali, data yang disimpan dalam sesi mencakup hal-hal seperti:

  • Nama pengguna
  • Hash
  • Tanggal pendaftaran
  • Variabel lain (id/kunci grup pengguna, dll.)
  • Pesan kilat
  • (BUKAN kata sandi!)

Namun, ada tradeoff. Jika lalu lintas (dan penggunaan) Anda meningkat dan Anda menyimpan banyak data di $_SESSION , kemungkinan besar Anda akan mulai melihat masalah, baik dalam hal penggunaan disk maupun memori.

Saya rasa tidak ada masalah dengan apa yang Anda sarankan, tetapi di luar item yang Anda daftarkan dan di mana contoh di atas tumpang tindih, diperlukan kehati-hatian.

Jika Anda ingin menskalakan (secara horizontal) dan mempertahankan sesi berbasis disk, maka Anda memiliki opsi ( sesi lengket atau jaringan area penyimpanan adalah pasangan) karena disk di satu server tidak menyimpan sesi yang sama dengan disk di server lain.


Lokasi data sesi

Anda dapat menemukan lokasi tempat PHP menyimpan data sesi dengan memanggil: session_save_path()

atau di CLI:

php -r 'echo session_save_path(), "\n";'

Anda belum menyebutkan OS Anda, tetapi lokasi umum untuk file sesi (di berbagai jenis OS) adalah:

/tmp 
/var/lib/php5/
/var/lib/php/session
c:/wamp/tmp

Sesi yang disimpan di disk biasanya memiliki nama file yang terlihat seperti ini menggunakan ls -al :

-rw-------  1 www www      0 2013-07-09 20:12 sess_bdsdjedmvtas5njhr5530b8rq6

Perlu dicatat bahwa seringkali ada proses pengumpulan sampah yang membersihkan sesi mati setelah periode tertentu. Ini bervariasi menurut OS, tetapi biasanya hadir dengan berbagai pemasangan berbasis LAMP.


Opsi/pendekatan penyimpanan sesi lainnya

Dalam basis data Anda
Data sesi sering disimpan dalam DB alih-alih di disk lokal dan ini berfungsi dengan baik untuk situs mikro, kecil, dan (tergantung cara melakukannya) menengah dengan tingkat lalu lintas yang wajar.

Seperti solusi lainnya, ia memiliki pro dan kontra (seperti dapat melarang/mengusir pengguna dengan menjalankan kueri daripada menghapus file sesi dari /tmp )

Dalam memori
untuk situs yang lebih besar, (lalu lintas lebih tinggi) dan khususnya di mana volume pengguna bersamaan tinggi, memori lebih cepat untuk membaca/menulis untuk variabel atau data yang sangat sering diakses daripada menambahkan beban yang tidak semestinya ke DB Anda. Itu dapat dan masih harus ditulis ke DB (Lihat caching write-through ), tetapi juga disimpan dalam memori untuk akses yang efisien.

Salah satu teknik keunggulan tertentu adalah caching memori . Contoh solusi open-source yang kompatibel dengan PHP yang banyak digunakan adalah Memcached , yang dapat digunakan di satu server atau banyak [didistribusikan]. Saya telah melihat ini digunakan oleh perusahaan kecil maupun besar dan Anda hanya perlu melihat siapa yang menggunakannya/berkontribusi...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JSON_MERGE_PATCH() vs JSON_MERGE_PRESERVE() di MySQL:Apa Bedanya?

  2. MYSQL beberapa sisipan di codeigniter

  3. Cetak data di ResultSet beserta nama kolomnya

  4. SQL Pilih hanya baris dengan Nilai Minimum pada Kolom dengan Kondisi Dimana

  5. mySQL mengembalikan indeks setelah dimasukkan