采用分布式数据存储有许多策略

选择存储方式首先要考虑满足应用的功能需求,其次要满足应用的伸缩性需求,最后需要考虑的是性能,结合具体的应用场景再进行权衡选择。比如复杂点的关系查询考虑用MYSQL,高并发的点击统计考虑用TTServer,列表类型的缓存考虑用Redis,字段不固定的文档存储考虑用Mongodb。同一份数据还可以存入到多种存储,根据查询场景分别选择适合的存储查询。


在系统架构中使用分布式数据库时,我们必须面对分区策略、一致性或延时问题的处理:一致性可以分为强一出风头性、弱一致性和最终一致性,并不是所有的应用都需要强一致性。根据应用 的特点,为了提高系统整体性能,我们还可以考虑会话(session)一致性。比如用户发表的微博、评论数据,用户自己可以马上看到,介是其他用户可能需要等一段时间。还有一些场景需要强一致性,比如支付问题。MYSQL数据库一般会使用master-slave复制模式进行扩展。在高压力访问情况下,MYSQL数据库主从复制延迟可能变得非常高。我们可以从上面提过的会话一致性来解决复制延迟问题。另外一个方案就是提高复制速度。


为了提高数据库的性能和可扩展性,我们往往会根据某些规则把数据进行拆分存储。分区策略应该遵循查询能在一个表完成的原则,尽量避免跨表查询。不管以hash,range或者其他方式都必须遵循这个原则。如果因为有多种关系查询,无法达到一次分区就满足上述原则,那么可以进行多次分区和冗余存储。

你可能感兴趣的:(架构)