You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on May 10, 2022. It is now read-only.
TODO(EN)
相关Issue:#121
总体原则:简单可扩展
当前问题
目前接口的主要问题即接口繁杂,而纠其根源是扩展性差导致的,具体表现为
过多的重载:为了扩展同一类型请求的不同行为,当前往往使用参数重载的方式。每当添加新参数或新功能,就需增加重载方法。这将引起接口数量持续膨胀。典型为每个写接口都被重载了两个版本:
多条数据批量读写:几乎每个基础接口(set/get/delete...)都被封装了两个batch方法:batchXXX和batchXXX2,而实际上每个batch方法的代码往往是重复的。例如:
返回结果不统一:目前查询的返回结果包括
value
,pair<hashKey,value>
,pair<sortKey, value>
,一方面用户需要区分获取的数据含义,另一方面如果获取数据包含额外信息(如timestamp),则根本无法扩展解决方案
封装:对请求参数和返回结果都进行封装,如果需要变更参数或者增加参数,只需改动封装对象,而不必添加重载接口,例如:
但是,将请求和返回结果进行封装的重构会导致现有接口被废弃,受影响的接口较多,该方案暂时搁置 :refactor: simplify api using encapsulating parameters and results #124 。
Batch接口重构:当前每个基础接口都封装了对应的batch接口,这使API的数量大大增加。batch操作应该设计可扩展的Batch抽象类,使得任何
single
操作都可以扩展为batch
操作,从而降低冗余的batch接口数量:详细设计
Batch接口重构
我们支持以下操作进行批量处理,它们目前在 PegasusClientInterface/PegasusTableInterface 都有对应的 batchXXX 接口:
那么下面给出具体重构方式:
Example:
Get操作基于Batch类重构的结果:
Set操作基于Batch类重构的结果:
新的Batch接口使用示例:
用户也可以自定义实现batch操作(仅需使用asyncXXX实现asyncCommit):
使用该方案后,包括checkAndSet等所有async接口都可以方便的扩展为batch操作。相关PR: #129
参考
[1] 良好的RPC接口设计,需要注意这些方面
[2] 主流的数据库接口:Hbase-Client、AmazonDynamoDB-Client
The text was updated successfully, but these errors were encountered: