-1

我正在制作一个有点大的 rails 应用程序,用户在其中填写了许多表格,并为汽车保险报价。报价引擎都是外部的,还有一个外部数据库。

我不需要将会话长期存储在 mysql 或类似的数据库中。

存储这些会话的最佳方式是什么。

CookieStore 是不安全的并且太有限( <4kb cookie )。

Memchached 是一种可能性,除了我不喜欢 key => value 对的想法,我希望尽可能多的关联数组。

任何与数据库相关的会话存储对于这些需求都是多余的(?)

某种文件存储系统可能是要走的路?

请有人建议存储会话的最佳方式吗?

4

2 回答 2

1

我不明白为什么这不能由数据库处理。

我建议在处理数据时使用数据库来存储数据,并Cron job在非工作时间删除旧记录。

如果涉及金钱交易,或其他类型的数据库交易,需要以ACID方式处理您的数据,您应该使用像PostgreSQL或类似的数据库。

如果不是这样,而您只是想快速存储一些数据,那么为什么不使用像MongoDB这样的NoSQL解决方案呢?

此外,作为警告,如果您决定使用文件系统来存储数据,您最终可能会遇到扩展问题,即数据存储在一台服务器上,但请求由另一台服务器处理。

于 2012-06-25T16:10:41.917 回答
1

Memcache 或数据库存储是要走的路。在这两种情况下,随着站点的扩展,您的许多服务器都将能够获取/设置会话数据。

我过去都使用过这两种方法,你应该知道一些事情:

1)两者都可以存储任意数据

Rails 会话被视为哈希,存储的值是该哈希的序列化版本。在 Memcache 中,键 => 值对是 session_id => session_contents。在数据库存储中,您有两列,一列用于 id,另一列用于内容。

2) Memcache 快一点

每一点速度都有帮助;为此,Memcache 将比数据库快一点。

3) Memcache 在填满时倾向于丢弃键

如果您的 Memcache 实例开始耗尽内存,它会开始删除键。它通过首先删除最旧的来做到这一点。由于会话被积极使用,您可以通过在每个请求上勾选会话数据来缓解这种情况;这使它们保持在堆的顶部。但是,如果您的实例真的满了,您可能会开始在地板上丢弃会话并将用户注销。这通常只是在非常快速增长的情况下才会出现的问题,例如如果您被点划线。否则,很容易关注您的 Memcache 服务器并确保您没有耗尽存储空间。

4) 数据库表将很快被过期会话填满 Memcache 会自动丢弃旧的东西。当用户没有注销而只是放弃会话时,您必须在数据库中手动进行清理。通常,这最好通过每天的 cron 作业来完成。如果没有,您最终会得到大量陈旧记录,这会减慢对该表的查询速度。

哪个最适合您?我不知道。这取决于您的情况以及您愿意承担的风险类型。我从来没有遇到过 memcache 会话丢失的问题,但这实际上取决于您使用 memcache 的其他用途。如果您经常使用它,那么第二个仅用于会话的 memcache 实例可能是可行的方法。那么就没有丢弃它们的风险。

于 2012-06-25T16:33:27.577 回答