关于构建大量数据库的建议

时间:2012-11-15 17:18:10

标签: php mysql database database-design

我正在Windows服务器上使用JavaScript,MySQL和PHP进行RIA。

我想将5000个结构相同的数据集放在数据库中。 5个表对于数据来说已经足够了,所有这些表都相当小,除了一个表中有300,000条典型数据集的记录。

此外,500名用户将获得对从这些数据集编译的统计信息的只读访问权限。这些统计信息由PHP提供(不允许直接访问)。更重要的是,他们对数据的访问各不相同。有些用户只能使用一个数据集,有些用户只能使用一些数据集。

用户看到的结果相对较小;大多数请求返回到100行以下,最大请求大约为700行。所有请求都是通过JavaScript RIA使用Ajax连接到PHP,然后PHP连接到数据,做它的事情并输出JSON作为响应,然后JavaScript会相应地呈现。

在思考如何构建这个问题时,有三个选择:

  1. 将数据集放在同一个表中。这可能很容易在最大的表格中给我1,500,000,000条记录。

  2. 为每个数据集使用单独的表。这将限制最大的表格大小,但可能意味着25,000个表格。

  3. 忘记数据库并坚持使用专有格式。

  4. 出于某些原因,我倾向于#2。

    1. 我关注使用非常大的表的问题(例如:查询速度,实现限制等等)。

    2. 单独的表似乎更安全;它们限制了错误和结构变化的影响。

    3. 单独的表允许我使用MySQL的表级安全性,而不是实现我自己的行级安全性。这意味着更少的工作和更好的保护;例如,如果在没有行级别安全性的情况下意外发送查询,则用户可能会收到未经授权的数据。表级安全性不是这样,因为数据库将无法拒绝查询。

    4. 这些是我的想法,但我喜欢你的。你认为这是正确的选择吗?如果没有,为什么不呢?我错过了哪些注意事项?如果扩展能力是一个问题,我应该考虑其他平台吗?

1 个答案:

答案 0 :(得分:1)

  

1)我关注使用非常大的表的问题(例如:查询速度,实现限制等)。

DBMS是否必须......

  • 搜索一个表的大索引
  • 或搜索右表,然后搜索该表的较小索引

......可能在性能方面没有多大差别。如果有的话,第二种情况有一个未记录的组件(找到正确的表的性能),所以我不愿完全信任它。

如果您想从5.1版开始对MySQL supports that directly进行物理分区,那么您不必通过单独的表来模拟它。

  

2)单独的表似乎更安全;它们限制了错误和结构变化的影响。

这就是备份的用途。

  

3)单独的表允许我使用MySQL的表级安全性,而不是实现我自己的行级安全性。

确实,通过视图或存储过程可以实现类似的效果。

总而言之,我的直觉是使用单个表格,除非您事先知道这些数据集在结构上有足够的差异以保证单独的表格。顺便说一句,我怀疑与专有格式的数据库相比,你能用专有格式做得更好。