SQLite作为会话存储



我想知道使用SQLite作为主会话存储还是至少作为具有主memcached的备份会话存储是一种好的做法?

你能给我一些利弊吗?

(我正在为教育目的构建MVC框架,并考虑了不同的可能性和实现方式)

SQLite Pros

  • 比基于文件的会话更快
  • 可以分布在基于文件的会话更尴尬的地方

SQLite Cons

  • 需要创建依赖项和其他要监视的内容的SQLite
  • 更难实现基于本机文件的会话
  • 大型应用程序可以通过如此多的读写请求、碎片、索引更新等快速杀死sql表,尤其是当几乎每个页面都命中特定的表时

甚至更好的解决方案-Memcache

由于会话通常是在每次点击页面时访问的,因此使用最快的机制是有意义的,而不需要数据库层的所有开销,同时仍然允许它在分布式系统中工作(例如,多个PHP服务器)。

使用经过PHP测试的Memcache,您甚至可以通过修改一些PHP.ini设置来集成Memcache会话,或者为了进行更细粒度的控制(或者使用redis等其他软件),您可以创建自己的自定义会话处理程序。

这有不同的优点和缺点

Memcache Pros

  • 非常非常快
  • 缩放良好
  • 通过PHP.INI易于实现

内存缓存缺点

  • 另一个可能崩溃并需要监控的服务
  • 使用RAM,与HDD空间相比,RAM通常是一种有限的资源,也需要监控

尽管您应该使用其他软件来监控这两件事,或者编写一个cron作业脚本来检查memcache服务是否仍在运行,但这是另一个问题和答案。重点是,这些缺点可以在一定程度上减轻

进一步阅读所涵盖的主题

  • 使用PHP.INI的Memcache会话
  • Redis
  • 自定义PHP会话处理程序

基于文件的会话是个坏主意,因为如果不关闭对会话的写访问权限(session_write_close();),文件将被锁定。但是,当您只需要使用sqlite来避免这个问题时,为什么要限制自己/服务器呢?

所以sqlite专业版:-易于使用(更改php.ini配置):

session.save_handler = sqlite
session.save_path = "/path/sessions.db"
  • 更快地加载页面(会话现在可以并行工作)
  • 使用ajax更快
  • 内置功能

sqlite con

  • 写入会话的速度较慢

我想使用apc,但我需要实现,我担心它可能会以安全问题告终。。。

PHP的文件库会话非常好且快速,使用SQLite存储会话只会增加会话管理的开销。

最新更新