阅读Nosql代码有感

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介:

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

     双十一是一个好日子,持续关注的几本书,几乎五折入手,其中有一本叫做《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操作,想想还是蛮激动的!

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
22天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL是关系型DB,依赖预定义的表格结构,适合结构化数据和复杂查询,但扩展性有限。NoSQL提供灵活的非结构化数据存储(如JSON),无统一查询语言,但能横向扩展,适用于大规模、高并发场景。选择取决于应用需求和扩展策略。
112 1
|
1月前
|
数据采集 Java 关系型数据库
Java代码高效连接数据库
Java代码高效连接数据库
18 2
|
1月前
|
存储 数据库 Python
用Python代码表示数据库
用Python代码表示数据库
14 0
|
2月前
|
数据库
电子书阅读分享《开源数据库工作室推广计划》
电子书阅读分享《开源数据库工作室推广计划》
17 1
|
2月前
|
存储 NoSQL 关系型数据库
面试题18: NOSQL数据库
面试题18: NOSQL数据库
|
2月前
|
关系型数据库 分布式数据库 PolarDB
电子书阅读分享《PolarDB开发者大会:PolarDB分布式数据库发展方向》
电子书阅读分享《PolarDB开发者大会:PolarDB分布式数据库发展方向》
23 6
|
29天前
|
SQL Oracle 关系型数据库
干货!sqlserver数据库所有知识点总结整理,含代码(挺全的)
干货!sqlserver数据库所有知识点总结整理,含代码(挺全的)
11 0
|
1月前
|
存储 前端开发 安全
酒店客房管理系统设计与实现(代码+数据库+文档)
酒店客房管理系统设计与实现(代码+数据库+文档)
|
1月前
|
存储 JavaScript 前端开发
基于SpringBoot的医护人员排班系统(代码+数据库+文档)
基于SpringBoot的医护人员排班系统(代码+数据库+文档)
|
1月前
|
前端开发 Java 数据库连接
基于SpringBoot宠物领养系统的设计与实现(代码+数据库+文档)
基于SpringBoot宠物领养系统的设计与实现(代码+数据库+文档)