我正在寻找一些一般性建议。我目前有一个数据库(使用PHP,apache和MYSQL),它运行如下:
数据库如何运作的细节是学术性的。我遇到的问题是,任何时候都可能有多个数据库用户登录。这导致如下问题:如果一个用户当前正在处理表3中的数据(步骤4)并且另一个用户运行交叉引用查询(步骤3),则第一用户使用的信息将被新数据覆盖。表4是一个'缓存'结果不断增长所以不应该被多个用户一次性添加它(该表使用auto_increment字段,因此不应出现重复记录的问题)。
有没有人对如何实现这一点有任何一般性的想法?该网站需要允许最多50个用户(理想情况下),任何时候都可以使用大约5-10个用户。
为每个用户创建一个单独的表似乎浪费了空间和精力(并没有提到用新代码更新它们!)。我想过创造一次性使用'表(可能链接了用户登录名?),这些表将在文件上传,使用然后在完成后删除时创建。这是一种好的做法还是会导致进一步的问题。
这是我部署的第一个网站/数据库,所以我不太确定好的做法/陷阱。任何建议都将不胜感激。
非常感谢
答案 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查询,在后台运行并将结果存储在临时空间中,并且仅在所有操作完成后保存数据。
<强> 4 强>
如果使用临时表不是强制性的,那么除了SQL服务器之外,最好处理这种逻辑,例如C ++,java或PHP。在SQL上编写/选择/刷新大量临时数据的性能不是很好。