如何实现基于订阅的DB,例如basecamp
-
19-09-2019 - |
题
我开发了一个功能齐全的 ruby-on-rails 应用程序,它利用了许多 mysql 表。我想将其转变为基于订阅的服务,但我有一些一般性的,可能是基本的概念性问题:
在像 Basecamp 这样的设置中,每个用户是否都可以访问她/他自己的(如唯一的)数据库表,或者这些表是否与数百万用户共享并由某些变量标识?
如果是这种情况,它的扩展能力如何?最好使用什么数据库(mysql、oracle 等)?
如果每个用户都有自己独特的数据库表;这是如何实现的?是通过 rake 任务吗?
您是否有建议的资源(书籍、媒体等)来解释如何实现这两种方法?
谢谢!
解决方案
我相信这是通过整体账户来实现的。当前系统中的资源将受到该帐户的限制。即在您的索引操作中类似@projects = @account.projects。看看大本营,我会说它的扩展性非常好!如果你遇到这个问题,那么你就有一个很好的问题需要解决,在此之前不要太担心。我应该想象数据库是一个集群,但非常怀疑每个用户都有自己的一组表,这将成为管理的噩梦!
快速谷歌一下,我发现了这个: http://www.robbyonrails.com/articles/2009/01/11/subdomain-accounts-with-ruby-on-rails-explained 它还链接到 DHH 的一篇文章,看起来它解释了他们是如何做到的。
可能会有更新的文章,但我猜它们将是一个很好的起点。
祝你好运!
其他提示
- 这些表使用外键值共享并标识给“父级”。每个用户拥有单独的表将是一场噩梦。良好的数据库规范化更有可能解决大部分问题。待办事项与项目相关,项目与帐户相关,然后每个帐户有许多用户。
- 使用最好的数据库完全取决于您。如果您使用 Rails 和数据库迁移,则您仅局限于该接口可以利用的内容。首先,选择 MySQL 或 PostgreSQL(我的偏好)。它们是免费的,并且有丰富的知识可用于业余爱好项目。
- 我个人不会为每个用户创建单独的表
- 阅读维基百科条目 数据库规范化 和 数据库设计 将是一个好的开始。接下来,您应该尽可能多地阅读有关良好数据库设计的内容,甚至可以从 开发人员常犯的错误 当涉及到数据库设计时。
不隶属于 StackOverflow