This repository has been archived by the owner on May 10, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 25
refactor and simplify the API #122
Comments
7 tasks
foreverneverer
changed the title
refactor and simply the API
refactor and simplify the API
Aug 25, 2020
这个client也不能立马使用上吧,因为API还没有调用到他? |
有没有参考那些系统,参考了可以附上链接 |
对,可以理解新加了个类,用来提供batch的使用方式,不影响原来的接口 |
已经更新了文档,并添加了如下链接: 参考[1] 良好的RPC接口设计,需要注意这些方面 |
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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: