我目前正在开发一个 SaaS 类型的应用程序,对于多租户,我已经为每个用户确定了一个数据库,每个数据库都包含用户有权使用的功能所需的所有表(已付费)。该应用程序旨在捕获数据(例如网络分析)并将其呈现给用户。该设计应该能够扩展到数以万计的用户(最终)。
一个可行的解决方案是在应用程序检测到需要它们时“动态”创建表吗?或者我应该在特定用户数据库中创建所有最终需要的表,只要我知道它们可能需要(用户升级、新功能等)?
我目前的架构允许我做这样的事情:
function insertData($table, $data) {
mysql_query("INSERT INTO ".$table." VALUES ('".implode("', '", $data)."')");
if ( mysql_errno() ) {
if (mysql_errno() == 1146) { // table does not exist
if ( $this->createTable($table) ) {
$this->insertData($table, $data)
}
} else {
// other errors
}
}
}
我希望能够灵活地添加功能,而不必遍历所有用户数据库来添加表,因此像上面这样的设置将帮助我实现这一目标。但我不确定我是否遗漏了一些让我日后后悔的决定?