【发布时间】:2011-07-06 08:41:58
【问题描述】:
由于我对问题的解释似乎不够清楚,让我再试一次。
设置:
我们拥有的 Web 应用程序使用单个 mySQL 用户连接到数据库,这或多或少是经典的方法。为避免混淆,我将 mysql 用户称为 sqluser,将登录到 Web 应用程序的用户简称为 users。现在,用户从他们的工作站登录到 Web 应用程序,工作站可以是台式机或笔记本电脑(主要是笔记本电脑)。
场景:
我将使用我们 Web 应用程序中的报告模块来说明问题。当用户向系统请求报表时,我们使用临时表来拉取、处理和格式化数据——php 接收准备好的结果集来显示,php 端不进行任何数据处理。问题是临时表或多或少是在 mysql 连接之间随机共享的,这使我们相信其中一些连接被重用了。这是不可接受的,因为两个用户生成相同的报告(但说来自不同的时间范围)会覆盖彼此的临时表。
目前,我们通过事务克服了这个问题:每个报告请求都包装在一个事务中 - 在其中创建和删除临时表,使它们对并行或重用连接透明。
我们想要什么:
我们希望每个不共享临时表的用户/工作站都有一个新的非共享连接。换句话说,我们希望为每个连接到 DB 的用户建立一个新的 mysql 连接,该连接将保留其临时表,但不会在与不同用户的并行连接之间共享它们。
可能的解决方案:
是为每个 Web 应用程序用户创建一个匹配的 sqluser,并将此 sqluser 用于给定用户的 DB 连接。由于此解决方案提供了额外的复杂性(管理 sqluser 与用户的匹配),我宁愿这不是首选。
问题:
我们能否以某种方式强制 mysql 在每个用户/工作站的基础上打开不会跨连接池共享临时表的 mysql 连接?是否有框架(php 或 python)可以开箱即用地提供这样的功能?
我希望这个解释比原来的解释清楚一点。
原文:
是否可以打开mysql 基于每个工作站的连接 登录同一个mysql时 用户?
以下是场景:我们的 webapp 有正在使用连接到 mysql 单个 mysql 用户,是什么让 mysql 重用打开的连接,有什么好处 到一个点。问题开始于我们 需要创建临时表 每台机器的基础。目前, 解决方法是使用事务和 之后删除临时表, 但我们希望它们可以重复使用 在工作站的会话内(在 webapp 用户上下文)。
另一种解决方案是创建 每个 webapp 用户的 mysql 用户和 在该用户上打开连接 登录。但是你必须管理 不断的旋转和匹配 mysql 用户到 webapp 用户。
相反,我们想以某种方式强制 mysql 每次打开新连接 webapp 用户,或者使用 工作站的内部 IP、macaddress、 等等。任何人都知道这是否是偶数 可能吗?
我们正在计划重写这个 webapp从头开始,所以基本上甚至 真正深刻的变化是可能的 这一点,因此问题。 也许有 php(或 python) 可以实现这一点的框架 开箱即用?
【问题讨论】:
标签: php mysql database-connection