多个用户访问单个表

时间:2014-05-19 15:03:46

标签: php mysql multi-user

我正在寻找一些一般性建议。我目前有一个数据库(使用PHP,apache和MYSQL),它运行如下:

  1. 用户将数据上传到数据库,存储在表1中。
  2. 用户将更多数据上传到数据库,存储在表2中。
  3. 用户运行查询以交叉引用两个表,结果存储在表3中。
  4. 处理表3并将得到的信息存储在表4中。
  5. 删除表1,2和3(准备下次上传/交叉引用)。
  6. 数据库如何运作的细节是学术性的。我遇到的问题是,任何时候都可能有多个数据库用户登录。这导致如下问题:如果一个用户当前正在处理表3中的数据(步骤4)并且另一个用户运行交叉引用查询(步骤3),则第一用户使用的信息将被新数据覆盖。表4是一个'缓存'结果不断增长所以不应该被多个用户一次性添加它(该表使用auto_increment字段,因此不应出现重复记录的问题)。

    有没有人对如何实现这一点有任何一般性的想法?该网站需要允许最多50个用户(理想情况下),任何时候都可以使用大约5-10个用户。

    为每个用户创建一个单独的表似乎浪费了空间和精力(并没有提到用新代码更新它们!)。我想过创造一次性使用'表(可能链接了用户登录名?),这些表将在文件上传,使用然后在完成后删除时创建。这是一种好的做法还是会导致进一步的问题。

    这是我部署的第一个网站/数据库,所以我不太确定好的做法/陷阱。任何建议都将不胜感激。

    非常感谢

2 个答案:

答案 0 :(得分:0)

为什么不为引用用户表的 UserID UserName 添加列,这样您将在该表中拥有多行,但用户会识别这些行。确保将索引添加到userID列。

此外,您应该使用 InnoDB 引擎,因为它使用 RowLevel 锁定而不是 TableLocking MyISAM

答案 1 :(得分:0)

<强> 1

您可以锁定整个事务的行,禁止任何人与它们进行交互,这可以使用InnoDB表类型完成,或者您可以将整个表锁定在MyISAM表类型上。

您可以找到信息on official mysql docs page

<强> 2

在表1和表2中保留一些唯一的用户标识符(和/或时间戳),并按这些列偶尔刷新它们。

3

MYSQL具有执行事务的特殊语法,将它们视为一堆SQL查询,在后台运行并将结果存储在临时空间中,并且仅在所有操作完成后保存数据。

Here's the link

<强> 4

如果使用临时表不是强制性的,那么除了SQL服务器之外,最好处理这种逻辑,例如C ++,java或PHP。在SQL上编写/选择/刷新大量临时数据的性能不是很好。