性能问题

1. TcaplusDB部署在比较主流的机器配置,建表/删表等操作大概会是一个多少秒的耗时?

按照正常情况下,秒级别进行表操作。

2. 批量加表操作,和在python里多次执行单次加表,效率上有比较大的区别吗?前者是不是只有一个事务,而后者则是每张表都是一个建表的事务?

效率其实都差不多,tcapcenter在处理表添加时,也是一个表的添加作为一个事务。批量加表,等于是批量操作,减少了多次提交的次数,但是在tcapcenter这里还是每个表一个加表事务在执行的。

3. TcaplusDB支持全量拉几十万条数据吗?数据量大概是5-20M,接口不常用

表遍历可以支持满足

4. pb表如果后期在某个表,新增一些参数,这个流程大约需要多长时间呢?

表变更,秒级别完成。不用停服,在线变更。

5. 如果shard数目过大、过小会对Tcaplus的增删改查性能、引擎调优这些有影响吗?

影响可以忽略不计,线上大表都至少分几百个shard

6. 业务的shard数量会考虑一些什么因素?

一般考虑: 每个shard有1G在内存里,其中约500MB存Key,300MB存Value,尽可能多的Key在内存里可以提升性能,增加shard 单shard最大256G,文件太大也影响一些恢复操作

7. Tcaplus高频读数据有没有穿透的问题呢?

Tcaplus有过载保护,穿透导致服务过载时,在接入层就会拒绝部分请求了

8. 如果瞬间涌入大量请求的话,tcaproxy和tcapsvr会有排队机制吗?

会有排队机制,超过处理能力会大时延、超时等。Tcaproxy的话,跟请求连接数有关,会按连接分散到proxy处理;Tcapsvr的话,跟请求数据是否分散有关,集中在少数shard或key的话,会有排队

9. 批量查询Generic表数据时 通过SetFieldNames设置只查部分需要的字段和不调用SetFieldNames查找所有字段的性能差别大吗?

两种方式会有性能差异,主要是体现在网络带宽资源消耗和各个环节打解包的资源消耗上,查询的字段越少,上述资源的消耗也就越少。

但需要说明的是这两种方式,在服务端存储层的磁盘IO上的带宽消耗上是一样,并没有什么太大差异,存储层都是要先读取整条记录,再做字段提取。

10. 对于需要经常读取的字段,将常用字段与不常用字段存放在一张大表,再通过SetFieldNames设置查询部分需要的字段,和将常用字段的数据单独存放在另一表里,两种方式性能差别大吗?

这两种方式确实存在一些差异。

  • 在网络带宽消耗上,两种方式差不太多。
  • 在存储层磁盘IO消耗上,两种方式有差异,将所有字段存放在一张大表中,不管是否通过SetFieldNames设置了只查询部分字段,也都需要从磁盘读到整条记录,消耗的磁盘IO是一样的。
  • 将常用字段和非常用字段分开存放,增加了业务的复杂性,业务需要同时访问两张表,还要考虑两张表的数据一致性。

对于这种场景,业务可以考虑一下TcaplusDB的触发器方案,将大表中的部分字段通过触发器同步到小表中,触发器会保证学士源表和目标表的数据最终一致性。

results matching ""

    No results matching ""