动态直接到数据库字段或“模拟”字段?

时间:2011-11-01 21:47:26

标签: database-design

在PHP / MySQL应用程序上......

我们计划为用户提供创建简单数据库的能力。

假设它可以获得超过10000个主要用户帐户,并且可能在几年后增加数倍。 什么是有效的方式?

A)直接在我们的应用程序数据库中创建用户定义的表和字段? 这不会是......我们的~40个表的应用程序和10000个用户创建的表一样吗?

我知道在查询和使用等时刻它会很有效

B)拥有表格和字段表? 像...

  • table usrtables
  • tabID
  • usrID
  • TABNAME

  • table usrfields

    -tabID

    -fldName

    -fldType

    -fldContent

非常感谢

1 个答案:

答案 0 :(得分:0)

如果您想成为托管数据库提供程序,最好是为每个用户提供包含其表的自己的数据库,这对于安全性和可伸缩性来说是最好的。

运行单个数据库中所有用户的选项1会导致一些问题,因为你会有很多表,但至少你仍然可以扩展,因为只要每个用户的表没有“说话”彼此(连接),您可以按用户对多个主机进行分片/分区。你最终得到的结构和工作量几乎与给每个人自己的数据库一样。如果您必须偶尔在用户之间进行联接,可能会更好。

选项2将导致所有用户数据混合到巨大的表中,这将导致索引写入开销,水平分区和锁争用很快就会引发问题。可扩展性的方法是尝试在可能的情况下将数据分解为小的孤立块,这种方法正朝着完全相反的方向发展。