这一年总得来说,读书的时间不多。一是因为时间啥关系,这一年一直在跟着项目走,或者被项目牵着走,几乎所有的时间和精力全部被拴在几个项目上;不过所幸今年创业失败,又回去上班了,时间相对空余了一些。

双十一是一个好日子,持续关注的几本书,几乎五折入手,其中有一本叫做《mysql技术内幕-innodb存储引擎》。工作闲暇之余经常拿出来翻翻,所幸自己对于线程和数据结构比较扎实,读起来虽然吃力,但是还是能吃透的。正是因为这本书的指引,让自己对数据库产生浓厚的兴趣,加上之前使用mongodb和redis的经历,让我决定好好研究下数据库。

   打开linux,eclipse,导入leveldb的工程,边阅读代码边调试起来;之后又添加了ssdb的代码,修改了少量代码,可以eclipse调试运行;redis也可以在eclipse里面跑并且调试,只是大家需要在调试时候指定makefile文件。

   leveldb是key-value形式的键值对数据库,更多的赞美就不说了,最大的一个特点,leveldb的key是排序的,这个排序的特性在ssdb中有很大的发挥。

   随着现在业务的开展,简单的key-value的键值对结构已经不能满足更复杂的系统和业务,所以让nosql支持更多的数据结构成为趋势,于是redis再渐渐代替memcache,于是基于leveldb的支持更多数据结构的nosql越来越多,ssdb应该只是其中一个吧。

起初在我的臆想中,ssdb为了支持更多的数据结构,那么应该也只能从value下手,让leveldb的value多种类型,比如他的value不再只是简单的string类型,而是有列表形式,有二叉树形式等等;看了ssdb的代码,才知道,原来作者是扩展的key,我们举几个例子。

简单的key-value的结构就不说,我们首先说说hash结构,比如一个玩家,有等级属性,经验属性,名称属性,等等,因为leveldb只支持最基本的key-value的键值对结构,所以我们这样设计key,对于玩家archy,我们在数据库中这样设计,h-role-archy-level表示玩家的等级key,对应的值是2;h-role-archy-exp表示玩家的经验key,对应的值是200;h-role-archy-name表示的玩家名称key,对应的值是archy。很多人估计要问了,这样如何保证得到玩家archy所有的属性;就像大概类似于select * from role where id="archy"的操作;或者像redis中hgetall role:archy的操作;前面我们已经讲过leveldb的key是排序的,再加上我们的key定义规则,我们可以轻易的从h-role-archy-""开始查找到 h-role-archy-level,如果查找到h-role-lopze-level,表示到底了,这样就实现了hgetall的操作。

再举个例子,queue的例子,比如我们要创建一个tasks的队列,他的值包括archy,lopze,ramon,我们这样去定义他的key,q-tasks-0对应值archy;q-tasks-1对应值lopez;q-tasks-2对应值roman;这样我们取tasks队列中所有的值,就可以取q-tasks-"" 到 q-xxx(xxx不同于tasks)截止就好。至于push,只需要设置q-tasks-n和对应的值就ok。这样我们就已经可以支持这个队列结构了。

代码量不大,有兴趣的可以去读读源代码。

我对于这些茫茫的nosql,感兴趣只是在mongo,leveldb,redis这几个春节之前想熟悉这几套;对于他的扩展,我想的是是否可以提供where的操作,比如我想查找level大于10级的玩家,而我却不想搜索数据库,想利用索引的方式,将level排序,排序的值正好对应相应的玩家key就好,这样就简单实现了select中的where操作,想想还是蛮激动的!

阅读Nosql代码有感的更多相关文章

  1. 使用SftpDrive+SourceInsight阅读开源代码

    在虚拟机环境下使用Linux编写和阅读代码,我之前一直是通过Xshell利用ssh登录至虚拟机从而在命令行下使用vim来进行的.目前有阅读开源代码的需要,虽然vim+ctags+cscope可以完成这 ...

  2. 使用vscode阅读C代码outline不显示问题

    1 问题:使用vscode code 阅读C代码 outline 显示No symbols found in document 'xxxx' 2 参考网上解决方法,进行如下操作 2.1  安装C/C+ ...

  3. 使用VIM插件ctags来阅读C代码

    说明 Ctags是vim下方便代码阅读的工具.尽管ctags也可以支持其它编辑器,但是它正式支持的只有vim.并且vim中已经默认安装ctags,它可以帮助程序员很容易地浏览源代码:ctags最先是用 ...

  4. vim阅读c++代码的快捷键

    未完,待总结 1. 首先适用ctags建立当前工作目录的标签: cd /home/wanglc/WorkDirectory ctags -R or ctags -R * 命令结束以后,会生成一个tag ...

  5. 阅读xtrabackup代码的一点笔记

    xtrabackup binary最重要的两个过程是backup和prepare,对应的函数分别是xtrabackup_backup_func()和xtrabackup_prepare_func(), ...

  6. [dev][nginx] 在阅读nginx代码之前都需要准备什么

    前言 以前,我读过nginx的源码,甚至还改过.但是,现在回想起来几乎回想不起任何东西, 只记得到处都是回调和异步,我的vim+ctags索引起来十分吃力. 几乎没有任何收获,都是因为当时打开代码就看 ...

  7. Kitex源码阅读——脚手架代码是如何通过命令行生成的(一)

    前言 Kitex是字节跳动内部的Golang微服务RPC框架,先已开源. Kitex文档:https://www.cloudwego.io/zh/docs/kitex/getting-started/ ...

  8. 阅读webpack代码笔记:antd-layout的webpack.config.prod.js

    'use strict'; const autoprefixer = require('autoprefixer');//自动补全css前缀 const path = require('path'); ...

  9. Java反射简单使用--第一次细致阅读底层代码

    1:所写的东西都经过验证,保证正确,环境jdk8,eclipse2:在例子中,尽量以生产环境中实际代码为例,那种固定值什么的没什么意义 问题: 1:想获取调用方法所需要的参数 2:参数是以json形式 ...

随机推荐

  1. linux下查看磁盘空间 [转]

    如果要查看磁盘还剩多少空间,当然是用df的命令了. [root@localhost ~]# df -h  文件系统              容量 已用 可用 已用% 挂载点  /dev/sda2   ...

  2. apache 80端口部属多站点配置

    1.在httpd.conf文件里启用虚拟主机功能,即去掉下面配置项前面的# #LoadModule vhost_alias_module modules/mod_vhost_alias.so 2..在 ...

  3. ab 测试模块高并发

    转载:http://gekie.iteye.com/blog/1704235 作为程序员,写好一个模块后,不知道这个模块在高并发的情况下能不能平稳过渡,这里所说的平稳过渡是指,在高并发的情况下还能正常 ...

  4. 用户管理 之 Linux 系统中的超级权限的控制

    在Linux操作系统中,root的权限是最高的,也被称为超级权限的拥有者.普通用户无法执行的操作,root用户都能完成,所以也被称之为超级管理用户. 在系统中,每个文件.目录和进程,都归属于某一个用户 ...

  5. 关于stacking context和CSS z-index的总结

    HTML中决定元素叠加顺序的CSS属性最有名的应该是z-index了.但是,往往在项目中发现有些情况和我们的预期不太一致.经过研究和学习,总算搞清楚了其中的关系.简单总结如下: 只有Positione ...

  6. python use dom to write xml file

    #encoding:utf-8 ''' write xml in dom style ''' from xml.dom.minidom import Document doc = Document() ...

  7. android apk--程序发布前的准备

    摘自:http://www.cnblogs.com/androidsuperman/p/4396889.html 首先,需要准备的工作: 1   用户协议(可以是本地html资源,也可以是通过webv ...

  8. 64位Linux下编译搭建Nginx1.5与PHP5.5(CentOS6.4)

    (1)安装Nginx1.5.2更新Nginx和PHP的依赖包yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng \libp ...

  9. Swift XML解析库 - SwiftyXMLParser

    经过在CocoaPods中筛选以后,发这个这个比较好用,整理出来 如果有需要可以在Pods命令端输入: pod search xml 这样会搜索出很多相关Xml的第三方库 SwiftyXMLParse ...

  10. CSS知识点-- Padding

    The CSS padding properties define the space between the element border and the element content. Padd ...