存储方面一般我们能想到的三个:关系型数据库、NoSQL、缓存。
关系型数据库主要介绍:读写分离 和 分库分表。
读写分离:
1、分散压力到多节点,存储压力未改变,包括一主一从、一主多从、多主多从。
2、考虑复制延时,从而带来复杂性,一般解决的常见方法:写操作后的读操作指定发给主服务器;读从机失败后再读一次主机;关键业务读写在从,非关键业务读写分离。
分库分表:分散访问压力,分散存储压力。
1、业务分库:按照业务模块将数据分散到不同的数据库服务器。同时带来其他问题,比如:join操作(同库的不同表被分散到不同库)、事务问题(不同库中不同的表需要在同一事务中进行时)、成本问题(服务器增多、工作量增大等)。
2、分表:垂直拆分,比如订单表中将不常用的字段拆分出去,常用字段整合在一张表,提升性能和效率;
水平拆分,主要针对数据量大的,比如数据量达到千万级别,有的就会出现性能问题,需要考虑拆分。
水平拆分的复杂性要大于垂直拆分,一般会涉及到:路由分配问题、count计算问题、join操作问题、order by问题等。
路由分配一般可以通过 指定范围(容易造成分配不均匀)、Hash分配(分配均匀,但扩容不方便&#x