我有两个独立的项目/站点,每个项目/站点都有自己的数据库。我想在两者之间进行共同的用户注册。我应该为用户帐户创建第三个数据库吗?
我应该如何实现这个?我正在使用 PHP Code Igniter(查看 Ion Auth),这也是另一个问题,因为必须在 php 配置文件中设置数据库配置,我将如何在两者之间交替。
我有两个独立的项目/站点,每个项目/站点都有自己的数据库。我想在两者之间进行共同的用户注册。我应该为用户帐户创建第三个数据库吗?
我应该如何实现这个?我正在使用 PHP Code Igniter(查看 Ion Auth),这也是另一个问题,因为必须在 php 配置文件中设置数据库配置,我将如何在两者之间交替。
http://codeigniter.com/user_guide/database/connecting.html
在代码中:
应用程序/配置/数据库.php:
$db["default"]["hostname"] = "localhost";
$db["default"]["username"] = "username";
$db["default"]["password"] = "password";
$db["default"]["database"] = "database";
$db["userdatabase"]["hostname"] = "localhost";
$db["userdatabase"]["username"] = "username";
$db["userdatabase"]["password"] = "password";
$db["userdatabase"]["database"] = "database";
在您的模型中:
$this->load->database('userdatabase');
// Do user stuff
$this->load->database('default');
创建第三个数据库(可能)会让你一团糟。两者都必须“远程”连接,当两者都想同时更新同一条记录时,你会怎么做。易于管理,但如果您将一个作为主控,另一个作为从属,则会更简单。
你有三个选择:
1) 始终针对“主”数据库进行身份验证 - 因此,即使您主要使用“数据库从属”,您也会跳到“数据库主”进行身份验证/注册/密码更改等,然后恢复为“从属”其他操作。当它们发生时,您需要将“主”上的用户和会话表的更改复制到“从”中,但这相当小,可以内置到您的模型中。这是我最常用的模型,也可以通过一些玩耍来跳跃域/服务器。
2) 始终针对本地数据库进行身份验证,并将更改从其中一个复制到另一个。虽然它有效,但您可能会因为不确定哪个是最新的而使会话表保持活动状态而陷入混乱。
3)恢复到“Master”和“Slave”选项,您可以设置联合表(http://dev.mysql.com/doc/refman/5.0/en/federated-storage-engine.html)。联合故事支持“更新”,因此当您更新“从属”时,您实际上是在更新主控。但是除非您的数据库在同一台服务器上,并且考虑到您的会话表(假设您正在执行无状态/数据库处理的会话)将在每次调用时访问并经常更新,否则我会避免使用此选项。不过,只是说这是一种选择。