我已经建立了一个很好的网站系统,可以满足小众市场的需求。去年,我通过使用 Capistrano 将软件的副本部署到我的 Web 服务器来销售这些网站。
在我看来,这些网站的唯一区别是数据库、CSS 文件和用于单个客户图形设计的一小部分图像。
其他一切都完全相同,或者应该是……现在我已经部署了大约 20 个这样的站点,要让它们都使用相同的代码进行更新变得很麻烦。而这个问题只会变得更糟。
我在想我应该重构这个系统,这样我就可以使用一组部署的 ruby 代码,通过传入请求的 URL 动态选择正确的数据库等。
似乎有两种处理数据库的方法:
- 使用多个数据库,每个客户端一个
- 使用一个数据库,每个表中都有一个 client_id 字段,以及一个额外的“客户端”表
多数据库方法目前对我来说是最简单的,因为我不必重构应用程序中的每个模型来将 client_id 字段添加到所有 CRUD 操作。
但是,每次我想迁移数据库时,都必须为数十个或数百个不同的数据库运行“rake db:migrate”会很麻烦。显然这可以通过脚本来完成,但它闻起来不太好。
另一方面,每个客户将在“项目”表中拥有 20K-50K 项目。当 items 表中有 50 万或百万个项目时,我担心全文搜索的速度。即使在 client_id 字段上有索引,我怀疑如果将项目分开到不同的客户端数据库中,搜索会更快。
如果有人对解决这个问题的最佳方法有明智的意见,我非常想听听。非常感谢提前...
- 约翰