阿里Tablestore概览

阿里Tablestore是基于阿里盘古分布式文件系统的一个处理大数量的一个产品。可以将TableStore的架构简单理解为Lucene+ BigTable。BigTable解决大数据存储的问题,Lucene解决搜索和排序的问题。

Bigtable分布式数据存储系统是Google为其内部海量的结构化数据开发的云存储技术,是Google的第三项云计算关键技术,是所有云时代分布式存储系统的开发蓝本,已经在超过60个Google的产品和项目上得到了应用。


存储。Tablestore没有Schema,与mongo中的NoSQL数据库类似,是一个泛KV结构的记录

索引。单就索引能力上看,多元索引可以覆盖二级索引的所有能力。二级索引在响应时间上比多元索引短。如果二级索引超过3个,就可以考虑多元索引。

多元索引。基于Lucene,支持Lucene索引的所有能力。

二组索引。基于内存中的KV结构进行查询,只支持相等匹配。类似于Mysql的索引,并且按索引中字段顺序,按最左匹配原则进行匹配,譬如二级索引 a,b,c,d四个字段,使用a,b字段是可以命中索引,使用a,b,d字段就不能命中索引。

常见问题及解决方案:

一个字段的不同记录中存放了不同的数据类型,使用多元索引时无法命中。

原因:

Tablestore是泛KV结构,无Schema。一条记录中某个字段没有值,在这条记录中就没有这个字段。但索引是强Schema的,如果Tablestore记录中字段类型与索引中的字段类型不同,则无法命中。

与索引中字段类型不同的字段值,可以认为是脏数据。

解决办法:

刷数据,让Tablestore中的字段数据类型、索引中的字段数据类型 统一。

查询超过千万的数据时超时

解决办法:

基于通道服务,消费Tablestore中的每条数据。

写入的数据使用多元索引不能立即查出。

原因:

不使用索引,指定主键是可以查到的。

Tablestore中的数据会先写入泛KV存储结构,然后通过通道服务同步到Lucene,来重建倒排索引,索引完成后,查询API就可以查到。

通道服务同步到Lucene且索引建立完成,需要1s+的时间。

数据对多元索引同见性的默认的时延是10s内 。

可以根据情况对这个值进行优化,最低可到1s-2s。 集群的优点和弱点,因为使用集群提供对外查询服务,所以高可用、高性能。

写入一条数据,要分发到集群中各个节点,就需要花时间。 新写入数据让多元索引可见,最短的耗时是1s~2s ,要达到这个时间,需要额外调优。默认的时延是10s内

解决办法:

其实没有解决办法。

Tablestore的查询速度就是靠这个弱一致性来实现的:写进去的数据,需要索引更新后才能查到,这中间就需要时间。有一个折衷的办法,就是写完成后,实现一个类似自旋锁的机制,每隔一定时间查询一次,如果查到则给请求方返回写入完成。

4、读写的QPS

写的QPS:可以认为没有上限。TableStore的节点可以无限扩展,可以理解为执行写入客户端的带宽永远会低于  TableStore的节点 的扩展能力。

读的QPS:这个没有确定值,因与查询条件紧密相关。正常pageSize 100的情况下,且使用MatchQuery和TermQuery QPS为1万+【默认三副本的配置】    。 嵌套查询和范围查询,是对qps影响较大的操作类型


参考文档:

https://www.jianshu.com/p/9bc4a96eb0ff

你可能感兴趣的:(阿里Tablestore概览)