作者回复: 加油,我们一起交流学习。
作者回复: 赞,系统性的对比非常详细!我再补一个,内存分配器,SimpleKV就是glibc,Redis的分配器选择更多。
作者回复: 这个比较丰富,赞!
作者回复: 跳表是在Redis的value类型为有序集合时采用的一种数据组织结构,作为集合内元素的索引,在有序集合中进行操作时会依赖于跳表索引。但是从key找到value本身这个过程还是由全局哈希表索引完成。
作者回复: 非常棒的一个思考过程! 而且做了很好的总结和对比,非常有利于知识点掌握,加油!
作者回复: 动态链接库是和语言相关的,例如C++语言实现的库由C++编写的程序调用。 如果用动态链接库实现键值数据库,应用程序可以先实例化动态链接库提供的类,然后调用实例的接口进行数据存取。我还是以SimpleKV举个例子,使用动态链接库方式时,使用方式类似如下:实例化一个db,然后可以进行读写操作。 simplekv::DB *db db.get(key, &value) db.put(key, value) 如果是用动态链接库实现的内存数据库,使用数据库的应用程序需要和库在一个主机上。如果不在同一主机上,就需要通过网络框架访问了,例如建立socket访问。
作者回复: 是的,这等于你使用键值数据库的应用程序和数据库本身是一个进程了,运行时也在同一个server上。
作者回复: 没错,和Redis相比,SimpleKV是个单机系统,扩展性就谈不上了,而且它也是个纯粹的内存数据库,高可靠也谈不上了。
作者回复: SimpleKV暂时还没有公开的源码,不过我们正在做一个SimpleKV的升级版框架,定义好了接口,可以自行替换其中的索引结构、存储管理、内存管理等模块,到时会开源出来。
作者回复: 网络框架理解的没错,此时,redis客户端和redis服务器端通常不在同一个物理机器上,需要过网络。如果是TCP/IP网络,就通过socket进行连接再访问。 动态库和SDK还不太一样,SDK通常封装了访问后端系统的操作,以API形式提供给程序使用。如果访问的后端系统和应用程序不在同一台服务器上,那么SDK中还是会和后端系统建立网络连接,以网络方式访问。而动态库实现的键值数据库相当于是在库里建立数据库的存储结构,一个应用程序调用这个库时就可以直接在本地存取数据了。