从以下三个方面实现高性能的多租户的最佳实践:
- 数据库层性能的优化
- 应用层性能的优化
- WEB层性能的优化
数据库层性能的优化
建立合适的索引:
- 应该创建在where,orderby,groupby等操作所及的列上。
- 有较强的选择性,即应尽可能建立在重复数据少的数据列中。
- 多个条件经常需要组合起来查询,应合理使用联合索引。
- 一次查询中只能使用一个索引。
- 索性过多,可能导致cud的性能降低,并且用更多的空间。
消除打数据表链接:
- 冗余储存关联字段。
- Cache缓存,变动概率不高的数据。
- 直接删除不是必须的关联字段。
- 拆分成多次查询。
避免复杂sql:
- 一般考虑将复杂的sql分解成多个简单的sql执行,将复杂的运算留在应用服务器中。
应用层性能的优化
Cache:
- 需要Cache的数据应该是读多写少的。比如基于角色的访问控制(放在session中)。
- 由于Cache的数据容失,为了保证可靠性,一般情况下还需增加一层逻辑,比如Cache访问不到时,访问数据库。
统计和报表计算优化
基于Tenant的索引搜索
- 一般的查询不一定要模糊查询。
- 使用搜素引擎(Lucene)
- 异步操作:没有从本质上提升系统性能或数据吞吐量,但提升用户体验度,同时也能降低系统的并发负载。表现层的异步Ajax,后台业务逻辑层的异步,JMS,MQ等技术。
WEB层性能的优化
WEB开发的性能优化策略
- 页面过大。
- 图片过多
- IFrame过多,增加了请求数。
- Cookie过大,每个request都会上传,每个response都会下载。
Http服务器的性能优化
- JBOSS于Apche有差异,Apche最好。