6

我想知道将 SQLite 用作主会话存储或至少用作主 memcached 的备份会话存储是一种好习惯吗?

你能给我一些优点和缺点吗?

(我正在构建一个用于教育目的的 MVC 框架,并且正在考虑不同的可能性和实现)

4

3 回答 3

7

SQLite 优点

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

SQLite 缺点

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

更好的解决方案 - Memcache

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

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

这有不同的优点和缺点

内存缓存优点

  • 非常非常快
  • 很好地扩展
  • 易于通过 PHP.INI 实现

内存缓存缺点

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

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

进一步阅读所涵盖的主题

于 2012-11-24T18:31:30.943 回答
2

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

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

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

sqlite con

  • 写入会话较慢

我想使用 apc,但后来我需要实施,我担心它可能会导致安全问题......

于 2013-03-26T13:31:59.033 回答
0

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

于 2012-11-24T18:27:01.037 回答