为啥要分库分表
你在一个创业型小公司做架构师,做的是电商项目,刚开始注册人数就几万而已,交易最多每天就几百单数据生成,这种情况下不用分库分表没问题的。
后面公司项目发展越来越快,用户活跃数几十万,订单生成数一天几百万,这个时候你的数据库服务器明显的扛不住的,单表的数据太多,磁盘资源有限,一系列的压力最终会导致系统无法使用。
这个时候架构师应该想到的是要进行业务划分,使用sharding-jdbc、mycat进行分库分表存储海量的数据。
这个是能解决上述的问题的,但是往往不是那么简单。
1、大量的编码工作,需要对查询集合计算结果,存储的时候按照不同的规则存入不同的库或者表中,工作量挺大的。
2、分库分表还要看以什么条件去进行切分,分的不好,可能查询次数变多,join无法使用,对排序分组也有很大的影响。这是个很重要的问题,要全面分析。
3、进行分库分表后,是不是又要保证原子性,改动后事务处理变得复杂。
等等。。。。还有一些其他的原因。
tableStore
tableStore也叫表格存储是阿里云自研的NoSQL多模型数据库,提供海量结构化数据存储以及快速的查询和分析服务。
表格存储支持分布式存储和强大的索引引擎,能够支持PB级存储、千万TPS以及毫秒级延迟的服务能力。
主要特点:
全托管。你只需专注于业务研发,无需担心软硬件预置、配置、故障、集群扩展、安全等问题,在保证高服务可用性的同时,极大地减少了管理及运维成本。模型丰富。包括Widecolumn、Timeline、Timestream、Grid。各种模型有各自适合的使用场景。无缝扩展。表格存储通过数据分片和负载均衡技术,实现了存储无缝扩展。随着表数据量的不断增大,表格存储会进行数据分区的调整从而为该表配置更多的存储。查询能力强。通过二元索引基本能满足传统数据库的查询。高可靠。表格存储将数据的多个备份存储在不同机架的不同机器上,并会在备份失效时进行快速恢复。数据强一致。表格存储保证数据写入强一致,写操作一旦返回成功,应用程序就能立即读到最新的数据。高并发读写。支持千万级并发读写能力。我们现在的项目当初做的时候也是挺急的,为了避免后期的大改动,所以选择了这个作为数据存储。
使用过程中文档齐全,最主要的是性能确实很不错,查询,写入性能很强。但是也存在着问题。
开发过程中遇到的缺点:
二元索引构建慢。你对一个表的查询会用到多个字段的时候,通常都是要简历二元索引的。数据写入的时候,构建二元索引较慢,所以你通过索引查询的时候存在延迟,大概2s左右。事务的支持。表格存储只支持局部事务也叫分区键事务,可以指定某个分区键下的操作是原子的。也就是说你对一个表的批量写是有事务的,如果换了表那就没办法了。这个对于分布式系统来说确实也是存在问题的,一个表写入了,另一个表的写入异常了,回滚不了。你觉得这个tableStore怎么样呢,有没有更好的便捷存储方式推荐,请留言!!!