在postgresql中,分区或多个数据库更高效吗?
有一个应用程序,许多公司发布信息.每个公司的数据都是自包含的 – 没有数据重叠.
性能方面,它更好: >在每个表的每一行上保留公司ID并让每个索引使用它? 具有持久连接的基于Web的应用程序. 我的想法: >新的pg连接很昂贵,因此单个数据库创建的连接较少
我建议在PostgreSQL邮件列表中搜索有关多租户设计的信息.那里有很多讨论,答案归结为“它取决于”.在保证隔离,性能和可维护性之间存在各方面的权衡.
一种常见的方法是使用单个数据库,但每个客户一个schema(命名空间),每个模式中具有相同的表结构,以及所有数据中相同的数据的共享或公共模式. PostgreSQL模式就像一个MySQL“数据库”,您可以跨不同的模式进行查询,但默认情况下它们是隔离的.通过单独模式中的客户数据,您可以使用 为了获得额外的保护,您应该 如果您的Web应用程序环境内置了一个不错的连接池(例如,您使用的是持久连接的PHP),那么您确实需要在Pg和Web服务器之间放置一个good connection pool,因为连接太多了到后端会伤害你的表现. PgBouncer和PgPool-II是最好的选择,在连接切换期间,您可以轻松地为您完成DISCARD ALL和RESET ROLE. 这种方法的主要缺点是维护许多表的开销,因为为每个客户克隆了基本的非共享表集.随着客户数量的增长,它会加起来,在autovacuum运行期间要检查的表的数量开始变得昂贵,并且根据数据库中的表总数进行扩展的任何操作都会减慢.如果您考虑在同一个数据库中拥有数千或数万个客户,这就更成问题了,但我强烈建议您在提交之前使用虚拟数据对此设计进行一些扩展测试. 理想的方法可能是具有自动行级安全性控制元组可见性的单表,但不幸的是PostgreSQL还没有.由于SEPostgreSQL工作添加了合适的基础设施和API,它看起来还在路上,但它不在9.1中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |