我正在开发一个基于Web的业务应用程序,每个客户都需要拥有自己的数据(想想basecamphq.com类型模型)对于可扩展性和易于升级,我更喜欢拥有一个数据库每个客户获得数据的过滤版本。问题是如何保证他们将沙盒保存到他们自己的数据中。试图在代码中强制执行它似乎是一场等待发生的灾难。我知道Oracle有一种方法可以根据登录ID为每个查询附加一个where子句,但是Postgresql有类似的东西吗?
如果没有,我可以使用不同的设计模式(比如为每个过滤的客户创建每个表的视图)?
更糟糕的情况是,拥有1000个100M数据库与拥有单个1Tb数据库的性能/内存开销是多少?我需要在每个客户的基础上提供备份/恢复功能,这在单个数据库上很简单,但如果他们与其他客户共享数据库则相当棘手。
答案 0 :(得分:1)
您可能希望将Veil添加到PostgreSQL安装中。
答案 1 :(得分:0)
模式加上继承的表可能适用于此,创建主表然后将表继承到每个客户模式,这些模式提供公司ID或名称字段默认值。
为每个客户设置每个架构的权限,并为每个用户设置架构搜索路径。在每个模式中使用相同的表名,以便查询保持不变。