我正在制作一个有点大的轨道应用程序,用户填写多个表格,并作为回报引用汽车保险。引用引擎都是外部的,以及外部数据库。
我不需要在mysql或类似的DB长期存储会话。
存储这些会话的最佳方式是什么。
CookieStore既不安全又有限(<4kb cookie)。
Memchached是可能的,除了我不喜欢key =&gt;的想法值对,我想尽可能多的关联数组。
任何与数据库相关的会话存储都是多余的(?)
某种文件存储系统可能是要走的路?
请问有人可以提供有关存储会议的最佳方式的建议吗?
答案 0 :(得分:1)
我不明白为什么数据库无法处理这个问题。
我建议使用数据库在处理数据时存储数据,并在非工作时间内删除Cron job
旧记录。
如果涉及 money transactions 或其他类型的数据库事务需要以ACID方式处理您的数据,则应使用像 PostgreSQL 或类似的数据库。
如果不是这种情况,并且您只是想快速存储一些数据,那么为什么不使用NoSQL之类的 MongoDB 解决方案?
此外,作为警告,如果您决定使用文件系统来存储数据,最终可能会出现数据存储在一台服务器上的扩展问题,但请求由另一台服务器处理。 / em>的
答案 1 :(得分:1)
Memcache或数据库存储是可行的方法。在这两种情况下,随着您的网站扩展,您的许多服务器将能够获取/设置会话数据。
我过去曾经使用过这两种方法,你应该知道一些事情:
1)两者都可以存储任意数据
Rails会话被视为Hash,并且存储的值是该Hash的序列化版本。在Memcache中,key =&gt;值对是session_id =&gt; session_contents。在数据库存储中,您有两列,一列用于id,另一列用于内容。
2)Memcache快一点
每一点速度都有帮助;为此,Memcache将比数据库更快。
3)Memcache倾向于在密钥满了时删除密钥
如果您的Memcache实例开始内存不足,则会开始删除密钥。它通过先丢弃最老的那个来做到这一点。由于会话被主动使用,您可以通过在每个请求上勾选会话数据来缓解这种情况;这使他们处于最佳状态。但是如果你的实例真的满了,你可能会开始在场上放弃会话并将用户注销。这通常只是在增长非常迅速的情况下才会出现的问题,例如,如果你遇到了斜线问题。否则,您可以轻松地关注Memcache服务器并确保您的存储空间不足。
4)数据库表将迅速填满过期的会话 Memcache自动丢弃旧东西。当用户没有注销但只是放弃会话时,您必须在数据库中手动进行清理。通常,最好使用每日cron作业。如果没有,你最终会得到一个无数的陈旧记录,这会减慢对该表的查询速度。
哪种方式最适合你?我不知道。这取决于您的情况,以及您愿意承担的风险类型。我从来没有使用memcache丢弃会话问题,但这实际上取决于你使用memcache的其他内容。如果你经常使用它,那么第二个memcache实例只是用于会话可能是要走的路。然后没有丢掉他们的风险。