-
Notifications
You must be signed in to change notification settings - Fork 118
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
能否考虑将与存储层的通信抽象成接口 #185
Comments
@gotoxu 这可能无法实现。titan 的实现基于 tikv 的架构提供的ACID 事务,底层抽象无法解决各种数据库的事务接口的不同。 或者说无法抽象出一套适用于所有带有分布式事务的存储组件的接口 |
@gotoxu 通用的接口我觉得是没问题的,Titan 也不一定会一直使用 TiKV,对于这样的改动,我个人觉得是可以接受的。不过这一层的抽象非常核心,需要有足够的灵活性。我们可以详细探讨下。我目前想到需要做的事情:
|
NVM, 可行性上当然是 open 的。不过有 以下几点 我觉得需要考虑:
|
@shafreeck 提一个不成熟的建议,是否可以参考golang标准库中database/sql包的实现方式,通过抽象出一个Driver来向系统进行注册,从而可以实现对接多种数据库实现。 @arthurkiller 我看了一下tidb的源码,应该也是这么实现的(当然我可能有遗漏之处,我暂时没时间仔细看)。如果是这样的话,那么我觉得titan也可以同样的方式实现,毕竟tidb也叫ti db |
实现是工程问题,不是阻碍。问题是想清楚为啥要这样做。 |
@arthurkiller 站在我的角度
基于此,我个人建议可以考虑抽象titan的通信层,避免重复造轮子。 |
@gotoxu 你们的存储具体是什么样的? |
https://apple.github.io/foundationdb/ FoundationDB 看起来是可以作为一个 TiKV 替换的 KV 层的。 |
@shafreeck 抱歉这么久才回复,今天才开工。我们使用的是nebula的底层KV存储,目前还不支持分布式事务,不过为了兼容titan可以mock一下。 |
@shafreeck 这个问题我看了,我们现在也在纠结是否需要更换实现了分布式事务的KV存储,我们内部先讨论一下。 |
回到抽象接口这个问题,#186 中提到了 Pika 的解决方案。 我突然意识到 Titan 其实也可以实现类似 Pika 的系统,问题的关键在于 Titan 底层接入的存储引擎是什么,这个引擎可以是内存存储,单机存储,或者分布式存储。 可能的选择有: 如果 titan 后端接入的是 badger,那他就是一个单机的基于硬盘的存储系统(类 Pika),如果接入的是 foundationdb 或 TiKV,就是一个分布式存储系统。 |
无论对接的是一个单机存储,还是分布式存储,Titan提供的抽象接口应该是一致的。也即,Titan不应该关心底层的存储对象是什么,只要该存储能够实现Titan需要其提供的API,那么就可以进行对接。 |
我这边正在实现一个基于通用kv存储的redis协议兼容的方案,目前已经实现string/hash相关命令,当前底层支持hbase、tikv、obkv,也可以自己替换,欢迎大家加我微信一起讨论哈(微信:hdnxttl) 项目地址:https://github.com/netease-im/camellia |
我们现在底层KV存储没有使用TiKV。
我们希望通过改造titan项目,将与存储层的通信抽象成接口,通过配置的方式自由选择连接具体的底层KV存储,不知道你们是否可以接受这样的改动。
如果不行的话我们只能fork出去自行开发,希望得到你的回复,谢谢!
The text was updated successfully, but these errors were encountered: