我正在寻找一些关于我是否应该使用单独的数据库来处理我的会话的建议。
我们正在为多个用户编写一个Web应用程序,以登录并检查/更新其帐户特定信息。我们不想在Web服务器上使用文件存储方法来存储会话信息,所以我们决定使用数据库(MySQL)。它工作正常,但我想知道它何时投入生产。
目前,我们有两个数据库(rst_sessions和rst)。 “RST”数据库是为webapp存储所有表的地方......它们都是使用参照完整性/外键链接表的MYSQL InnoDB。 “RST_SESSIONS”数据库只有一个表,所有会话信息都存储在那里。
这是我的一个担忧。在PHP代码中,如果我想对“RST”运行查询,那么我必须在php中选择该数据库($ db-> select(“RST”))...当我完成查询时我必须重新选择“RST_SESSIONS”($ db-> select(“RST_SESSIONS”)),否则会话特定信息不会被设置。因此,通过webapp,代码正在大量选择和重新选择两个数据库。这可能会导致用户群(10,000 - 15,000)出现性能问题吗?我们最好将RST_SESSIONS表移动到RST数据库中以避免所有选择吗?
我们最初设置这种方式的一个原因是能够将会话信息存储在单独的数据库服务器上,因此它不会干扰webapp数据库的操作。
这两种方法的专业和概念有哪些?您建议我们为表现做些什么?提前谢谢。
答案 0 :(得分:1)
如果你担心性能,另一个替代解决方案是不将你的会话存储在数据库中,而是使用类似memcached的东西 - 与memcached对话的PHP库已经为会话提供了一个处理程序。
使用memcached的一些优点:
现在,回答您的具体问题:
我会使用两个不同的连接,而不是选择数据库:
当然,这意味着服务器上的负载会更多(它打开的连接数量增加一倍),但它确保在需要它的那一天,你将能够将“会话”数据库移动到另一台服务器:您只需重新配置连接字符串;并且由于应用程序已经使用了两个单独的连接,它仍然可以正常工作。
答案 1 :(得分:0)
如果您可以使用它,只需打开与数据库的第二个连接。这样你就不必在数据库之间切换了。当然,现在你消耗了两倍的连接,并且可能需要超出限制。
答案 2 :(得分:0)
除非将您的身份验证信息放在单独的数据库中有一些压倒一切的理由,为什么不将其与其他数据一起使用?您可能会觉得将所有东西放在一个地方很方便。
另请注意,您可以使用模式(数据库)名称在sql查询中限定表名称,例如。
SELECT ACTIVE
FROM RST_SESSIONS.SESSION
WHERE SID=*whatever*
如果它们都在同一台服务器上,这可能会让您无需明确切换dbs。