我建立了一个适合小众市场需求的不错网站系统。过去一年以来,我一直使用Capistrano 将该软件的副本部署到我的网页服务器并销售这些网站。
我意识到这些网站唯一的区别就是数据库、CSS 文件和一小部分用于个别客户的图形设计所使用的图片。
其他一切都一模一样,或者应该是...现在我已经部署了大约20个这样的网站,将它们全部更新相同的代码变得很麻烦。而且这个问题只会变得更糟。
我正在考虑重构这个系统,以便我可以使用一组部署的Ruby代码,通过传入请求的URL动态选择正确的数据库等。
看起来处理数据库有两种方式:
- using multiple databases, one for each client
- using one database, with a client_id field in each table, and an extra client table
目前来说,多数据库方法对我来说是最简单的,因为我不需要重构应用程序中的每个模型,以将client_id字段添加到所有CRUD操作中。
但是,每次想要迁移数据库时都必须为数十个或数百个不同的数据库运行 rake db:migrate 将是一件麻烦的事情。显然,这可以通过脚本完成,但这并不好闻。
另一方面,每个客户在项目表中将拥有20K-50K个项目。当项目表中有50万或100万个项目时,我担心全文搜索的速度。即使在client_id字段上建立了索引,如果项目被分隔到不同的客户数据库中,我猜想搜索将更快。
如果有人对解决这个问题有经过研究的意见,我非常想听听。提前非常感谢...
约翰