【问题标题】:Caching permissions or use the database for each request?为每个请求缓存权限或使用数据库?
【发布时间】:2011-07-28 03:23:07
【问题描述】:

我目前正在使用 MVC 模式构建一个 PHP 应用程序。

我在应用程序中实施了基于角色的访问控制 (RBAC)。目前,用户权限是使用大约 7 个连接确定的,然后缓存在用户的会话中。会话存储在数据库中。

可以将权限想象为包含这些列的表:

  • 模块
  • 控制器
  • 动作
  • 类型
  • 对象 ID
  • 状态 ID

当我需要匹配权限时,模块、控制器、操作和状态 ID 必须与表中的确切条目匹配,其中“对象 ID”是可选的,具体取决于“类型”。

假设我平均每个用户有100个权限,那么缓存在数据库中的sessions变量中,然后使用PHP的数组函数解析缓存的结果是不是效率更高?

或者执行这些连接并确定是否允许在每次有请求时执行该操作会更有效?

干杯:)

【问题讨论】:

    标签: php sql arrays performance caching


    【解决方案1】:

    连接可能会更慢,特别是如果您有很多用户或权限(因为一旦缓存空间用完,它会导致服务器使用临时表)。

    如果权限很少更改,那么在会话期间将其保留在会话中是有意义的。请注意,您还可以将权限超时,并根据需要每小时或随时检查,这是一种妥协。

    另一方面,如果您非常偏执或 perms 经常更改(例如,在 stackoverflow 上),一个解决方案是使用计算表视图来存储连接的结果,以便计算实际的连接改变,而不是访问。取决于数据库的另一种选择是使用触发器来维护每次源表更改时重新计算的权限的“计算”版本。

    顺便说一下,我会在数组上使用序列化将其转换为文本。

    【讨论】:

    • 感谢您的回复 :) 权限不会有太大变化。所以你会说使用PHP数组函数和循环处理权限会比使用SQl处理权限快很多?
    • 差不多。您当然应该配置文件(我不知道这些表和权限的真正样子,所以我按照您所说的进行),但是对于多个连接,PHP 循环在大多数情况下很容易获胜。
    猜你喜欢
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多