एक custom session handler लेखन आश्चर्यजनक रूप से आसान है, लेकिन मुझे लगता है कि शायद बेहतर तरीके MEMORY
तालिकाओं की तुलना में सत्र डाटा स्टोर करने की कर रहे हैं।
तरह स्कीमा कुछ (a previous question से परिवर्तन के साथ उठाया)
CREATE TABLE IF NOT EXISTS `session` (
`id` char(32) NOT NULL,
`data` varchar(20000) NOT NULL,
`time_created` timestamp NOT NULL default '0000-00-00 00:00:00',
`time_updated` timestamp NOT NULL default '0000-00-00 00:00:00' on update CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `time_created` (`time_created`),
KEY `time_updated` (`time_updated`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8;
तो आप बस के रूप में ऊपर या इस tutorial में लिंक में रेखांकित, आपका सत्र हैंडलर कार्यों को परिभाषित करना होगा। यदि आप कचरा संग्रह के दौरान अपनी सत्र जानकारी को सहेजना चाहते हैं तो आपको INNODB
इंजन का उपयोग करके ऊपर दिए गए एक तालिका को बनाना होगा और gc()
फ़ंक्शन के अंत में थोड़ा सा जोड़ना होगा जो पंक्ति को MEMORY
से INNODB
तालिकाओं में कॉपी करता है।
हालांकि MEMORY
तालिकाओं में कुछ महत्वपूर्ण महत्वपूर्ण सीमाएं हैं। वे BLOB
या TEXT
कॉलम का उपयोग नहीं कर सकते हैं - यही कारण है कि मेरे ऊपर उस बदसूरत varchar(20000)
है। उनके पास 16 एमबी अधिकतम आकार है। यदि आपके पास बहुत सारे उपयोगकर्ता हैं, तो बहुत सारी स्थिति रखें, या कचरे के संग्रह में समस्याएं हैं जो आप उस सीमा और दुर्घटना को मार सकते हैं।
memcache
session handler का उपयोग करने का एक बेहतर विचार है, खासकर यदि आपको दूरस्थ भविष्य में सत्र जानकारी संग्रहीत करने की आवश्यकता नहीं है। मुझे यकीन है कि memcached
किसी भी आरडीबीएमएस की तुलना में तेज़ है (यहां तक कि MEMORY
टेबल के साथ) और यह डिज़ाइन द्वारा अच्छी तरह से स्केल करता है। इसके अलावा आपको अपना खुद का सत्र हैंडलर फ़ंक्शन लिखना पड़ेगा।
[max_heap_table_size] (https://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_max_heap_table_size) सिस्टम चर समायोजित करके अधिकतम तालिका आकार को बढ़ाना संभव है। –