阅读Nosql代码有感

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

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

   打开linux,eclipse,导入leveldb的工程,边阅读代码边调试起来;之后又添加了ssdb的代码,修改了少量代码,可以eclipse调试运行。

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

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

起初在我的臆想中,ssdb为了支持更多的数据结构,那么应该也只能从value下手,让level多种类型;看了ssdb的代码,才知道,原来人家是扩展的key,我们举几个例子。

至简单的key-value就不说,我们说说hash结构,比如一个玩家,有等级属性,经验属性,名称属性,等等,因为leveldb只支持最基本的keyvalue,所以我们这样设计key,对于玩家archy,我们在数据库中这样设计,h-role-archy-level:2,h-role-archy-exp:200,h-role-archy-name:400。很多人估计要问了,这样如何保证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截止就好。至于push,只需要设置q-tasks-n和对应的值就ok。这样我们就已经可以支持这个队列结构了。

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

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

时间: 2024-12-18 18:09:47

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

阅读xtrabackup代码的一点笔记

xtrabackup binary最重要的两个过程是backup和prepare,对应的函数分别是xtrabackup_backup_func()和xtrabackup_prepare_func(),这里做一些阅读代码时的笔记. xtrabackup backup的线程模型: 1. 一个log拷贝线程: 2. n个ibd文件拷贝线程: 3. 一个io监控线程: 4. 通过suspend_start/suspend_end文件来标注是否启动终止线程: typedef struct { datafi

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

1 问题:使用vscode code 阅读C代码 outline 显示No symbols found in document 'xxxx' 2 参考网上解决方法,进行如下操作 2.1  安装C/C++ 扩展 2.2  安装 clang  和  安装MinGw, 理论上来说只要一个就好了 2.3 配置工程头文件路径,Ctrl+Shift+p, 选择C/C++:Edit Configurateions(JSON),弹出c_pp_properties.json文件进行配置 3 进行上述步骤后,发现依

阅读《代码大全》(第二版)体会小结

这一次阅读了著名的<代码大全>(第二版).全书虽然章节众多,但是主要就是几个大部分,这些部分我大多有一些浅显的了解但还未深入,当然也有一些全新的体验,例如表驱动法.全书内容丰富而详细,我在阅读的其中问题并不是太多,只不过很多的内容都觉得了解的还太浅,需要更多的实践以及阅读去体会.在这里记录下的也就是一些自己的体会,主要是对书中一些论断的不同看法与讨论,大部分是关于面向对象和结构化设计的内容:以及对于全新接触的表驱动法的学习体会. Question 1: “7.1 创建子程序的正当理由”中,提到

python阅读器代码

最近在学习python,作业是用python写一个阅读器: 要求如下: 1,有自动阅读模式 2,可以上下翻页 实战: 代码如下: 写的不是很好,如有不当之处,欢迎指正交流~

如何阅读X264代码

http://www.cnblogs.com/xkfz007/articles/2616057.html 最近我也开始看 X264 的代码了,于是想到把我读代码的过程记录下来,因为总有很多新手问如何读代码,我这个帖子就是专为这些人写的.至于会读代码的人就完全没有必要看了.下面当然是以 X264 为例了.JM 以及其他代码的学习方法和技巧都是完全一样的.我所用的版本是在帖子 在VS2008下编译最新版的x264连接错误 里上传的版本.最新版本的代码基本结构应该变化不大. 首先肯定是要把 X264

麻省理工18年春软件构造课程阅读04“代码评审”

本文内容来自MIT_6.031_sp18: Software Construction课程的Readings部分,采用CC BY-SA 4.0协议. 由于我们学校(哈工大)大二软件构造课程的大部分素材取自此,也是推荐的阅读材料之一,于是打算做一些翻译工作,自己学习的同时也能帮到一些懒得看英文的朋友.另外,该课程的阅读资料中有许多练习题,但是没有标准答案,所给出的答案均为译者所写,有错误的地方还请指出. 译者:李秋豪 审校: V1.0 Thu Mar 8 22:58:41 CST 2018 本次课

搭建自己的博客(十六):封装优化阅读量代码

1.将阅读量的代码封装在一个app中,增加扩展性 新建app: python manage.py startapp read_statistics 2.变化的部分 3.上代码 from django.contrib import admin from .models import BlogType, Blog # Register your models here. @admin.register(BlogType) class BlogTypeAdmin(admin.ModelAdmin):

第1次作业:阅读优秀博文有感

第一部分:结缘计算机 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?                                                                                                                                                                            答:高考结束后因为成绩的不理想所以选择的专业类型很少,加之学的是理科,所以

最近敲代码有感

1)多敲多练,这样才对让手指对键盘更加熟悉,习惯键盘的啪啪声,并要觉得这个声音很美妙. 2)好习惯是一点一点养成的,代码可读性要强,不明白的地方要添加注释,便于以后容易理解自己写的代码. 3)多看看一个经典的算法和案例,和常用的工具函数. 4)学习数据结构和理解算法知识,这个非常重要. 5)包持一定的好奇心,不要停下学习的脚步,不懂的地方多Google 百度,然后把知识点总结起来用有道云笔记或者博客记录下来,为以后回顾做记录. 6)坚持锻炼,忍受寂寞,抵制诱惑.