驚くほど簡単ですが、私はMEMORY
テーブルよりも、セッションデータを格納するために、おそらくより良い方法があると思います。
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;
(a previous questionからの変更で持ち上げる)のようなスキーマ何かこのtutorial上または内のリンクで概説として、あなたは、あなたのセッションハンドラ関数を定義するだけで必要があると思います。ガベージコレクション中にセッション情報を保存する場合は、INNODB
エンジンを使用して上記のテーブルと同じテーブルを作成し、MEMORY
からINNODB
テーブルに行をコピーするgc()
関数の最後にビットを追加する必要があります。
MEMORY
テーブルにはかなりの制限があります。 BLOB
またはTEXT
の列を使用することはできません。そのため、上記のような醜いvarchar(20000)
があります。最大サイズは16 MBです。多くのユーザーがいる場合、状態をたくさん保つか、ガベージコレクションに問題がある場合は、その制限を超えてクラッシュする可能性があります。
遠い将来にセッション情報を保存する必要がない場合は、memcache
session handlerを使用することをお勧めします。私は確かにmemcached
はどんなRDBMS(たとえMEMORY
テーブルでも)より速く、それは設計によってうまくスケールされます。さらに、独自のセッションハンドラ関数を記述する必要もありません。
[max_heap_table_size](https://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_max_heap_table_size)システム変数を調整することで、最大テーブルサイズを増やすことができます。 –