Electronic Joint Business

Solution for E-Business

用 PostgreSQL Schemas 创建多租户 Rails 应用

许多 Rails 应用有多租户的需求。为此可以采取多种不同的策略,而每种策略都各有利弊。Guy Naor 曾对每一策略的利弊都进行了详细论述,具体可以参考他的 2009 Acts As Conference talk(必看)。1 这些多租户策略之一运用了 Postgresql 特有的称为 “Schemas” 的特性。不过 Guy 只是在技术层面泛泛带过,并未深入到实现细节。要如何运用这一策略来实际完成多租户应用,你可以从网上搜到几篇博客、StackOverflow 的讨论以及一些半成品,但诸多细节还要自己推敲,这里我将之记录下来,以飨读者。 为什么使用 PostgreSQL Schemas Guy 列举了多租户 Rails 应用的三种基本策略:2 每个租户使用独立数据库 单一数据库,用记录维护着租户关系的范围 单一数据库,每个租户使用不同的 Schemas (只适用 PostgreSQL) 选择哪一种策略需要诸多考量,这里不一一列举,我想说的是,对于第 3 种策略,应用应有以下特征: 租户的数据是私有的,不能泄露给其他租户 几乎不进行跨租户数据聚合的查询 租户数量很多,无法承担过高管理开销 由于应用间存在千差万别,所以个人建议你最好认真看完该演讲,然后自己阿里做决定。如果你最终还是选择了 PostgreSQL Schema ,你再回来继续读完这篇文章。 PostgreSQL Schemas 是如何工作的 就该特性而言,”Schema” 实在是个很糟糕的名字。大部分人看到 “Schema” 这个词,马上想到的就是数据定义。不过 PostgreSQL schemas 与之风马牛不相及。也许 PostgreSQL 开发团队有千百个理由,不过就个人而言,我觉得“名称空间 Namespaces” 要贴切得多。 […]

, , ,

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.