Xu Qiaolun
Xu Qiaolun
The xlsx matcher just look like this: ```go func Xlsx(buf []byte) bool { return len(buf) > 3 && buf[0] == 0x50 && buf[1] == 0x4B && buf[2] == 0x03 &&...
@shafreeck 提一个不成熟的建议,是否可以参考golang标准库中[database/sql](https://github.com/golang/go/blob/master/src/database/sql/sql.go#L44)包的实现方式,通过抽象出一个Driver来向系统进行注册,从而可以实现对接多种数据库实现。 @arthurkiller 我看了一下[tidb](https://github.com/pingcap/tidb/blob/master/store/store.go#L30)的源码,应该也是这么实现的(当然我可能有遗漏之处,我暂时没时间仔细看)。如果是这样的话,那么我觉得titan也可以同样的方式实现,毕竟tidb也叫***ti*** db
@arthurkiller 站在我的角度 - Redis数据结构和RESP协议解析是可以重用的,不需要和TiKV的sdk进行绑定,这样当我需要实现一个基于磁盘KV并兼容Redis协议的系统而言,我只需要实现通信层即可,不需要从头再实现一遍。 - 对于用户而言,也许我已经有一个稳定运行的分布式磁盘KV系统,我不需要为了对接Redis而重新启用一套新的KV系统,这样会增加我的运维成本。 - 便于切换。假如我发现有新的磁盘KV系统更适合我的需求,或者性能更强大, 我可以更快速的切换到新的系统上,而不需要做大量修改。 基于此,我个人建议可以考虑抽象titan的通信层,避免重复造轮子。
@shafreeck 抱歉这么久才回复,今天才开工。我们使用的是[nebula](https://github.com/vesoft-inc/nebula)的底层KV存储,目前还不支持分布式事务,不过为了兼容titan可以mock一下。
@shafreeck 这个问题我看了,我们现在也在纠结是否需要更换实现了分布式事务的KV存储,我们内部先讨论一下。
无论对接的是一个单机存储,还是分布式存储,Titan提供的抽象接口应该是一致的。也即,Titan不应该关心底层的存储对象是什么,只要该存储能够实现Titan需要其提供的API,那么就可以进行对接。
Is anyone involved in the development of this feature now?
I really need this feature, but I don’t have time to develop this feature at the moment. If I have time later, I'll consider it.
1. 这是一个不好的设计,因为你的接口实际返回值的结构并不相同,比如你的批量操作接口返回的JSON结构的顶层就并没有code,而是将code放入了data数组中,并且将data数组中的code在客户端强行统一到一个顶层的code中在我看来也并不是一个好的设计。即使在客户端将所有接口的返回值进行统一后,如果服务器的某个单独的接口发生变更,那么修改SDK代码就会影响到其他接口。 2. 4xx返回值的处理代码在这里: ```Go func (c *Client) handleResponse(resp *http.Response, out interface{}) error { if resp.StatusCode >= http.StatusBadRequest { var err ErrorResponse if e := c.decodeJSONBody(resp, &err); e != nil...
@dzh 关于第二个问题,我们还是认为目前来说统一的返回值格式不是一个好的设计,当然如果你的意思只是要求所有的返回值中必须有一个code字段,那么我可以处理,但是如果要求改成像你们sdk里那样统一返回Result结构体,那么我们不会这样实现。因为实际上你的接口返回值并没有统一,即使将来统一了,再修改sdk也可以。但是现在强行在客户端统一会对用户使用造成不变。比如,如果目前要实现统一的返回值,那么你Result结构体中的Data字段就必须定义为 `interface{}` , 这对于用户要解析Data中数据的操作就会造成困难,实际上你的SDK代码中也大量使用了反射,我们认为这并不是一个好的实现方式。 如果你执意要求按照统一的Result返回值格式定义,那么请关闭该PR,我们将自行使用我们自己开发的SDK,如果你可以接受我们的建议,那么我再继续实现V1接口并完善单元测试,谢谢