版本: beansdb 0.5.3

下载地点:
http://code.google.com/p/beansdb/

beansdb是豆瓣用来存储不变小object的支持中等数据规模的nosql的持久型数据库~跟memcache相比,主要特点如下

1. 数据是持久化的,value 完全在硬盘上操作,内存中只存放key的hash索引

2. 在持久化的基础上,为了提高可靠性,一份数据可以设置存放在多个地方

3. 把分布式坐在了客户端的api里,beansdb本身是单机的

4. 存储使用bitcast的方式~~ 跟b+树索引(tokyocabinet)和lsm(leveldb)又不一样的~挺巧妙~

5. beansdb没有实现expired功能~~~

6. 网络连接的管理直接搬了redis的实现~~~

下面主要介绍配置文件的工作方式,自带的example中的配置是这样的

BEANSDBCFG = {"localhost:7901": range(16),"localhost:7902": range(16),"localhost:7903": range(16),
}

翻译过来就是

localhost:7901:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

localhost:7902:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

localhost:7903:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

客户端拿到这个配置,会做一下“倒排”

0:localhost:7901;localhost:7902;localhost:7903

1:localhost:7901;localhost:7902;localhost:7903

2:localhost:7901;localhost:7902;localhost:7903

。。。

15:localhost:7901;localhost:7902;localhost:7903

当客户端对key进行操作【set,get,delete】时,会先对key进行hash/16 ,然后你懂的,这里读和写有个比较trick的地方

读的时候

读到了会对其他同一个桶内的server做一个set,利于数据恢复.

    def get(self, key):ss = self._get_servers(key)for i,s in enumerate(ss):r = s.get(key)if r is not None:# self healfor k in range(i):ss[k].set(key, r)return r

写的时候

会对统一个桶内的所有的server做写操作,由此达到冗余存储的目的~

总结:

1. 简单,够美

2. 基于磁盘,没有提供可选的expire功能,可能豆瓣的需求是用来存储不会删除,不经常改变的大量小object吧,按照作者的说法,是针对豆瓣海量音乐,图片的~~~

3. 配置文件的映射比较复杂~~

4. qps不会很高,因为依赖与单机的相应速度,几百qps的样子吧,不会太高

总之受益匪浅~~~ 好了就到这

谢谢

转载于:https://www.cnblogs.com/igloo1986/archive/2013/05/07/3064170.html

【noqsl】beansdb的分布式实现~简单粗暴有效~相关推荐

  1. 简单粗暴上手TensorFlow 2.0,北大学霸力作,必须人手一册!

    (图片付费下载自视觉中国) 整理 | 夕颜 出品 | AI科技大本营(ID:rgznai100) [导读] TensorFlow 2.0 于近期正式发布后,立即受到学术界与科研界的广泛关注与好评.此前 ...

  2. 如何简单粗暴地上手 TensorFlow 2.0?

    整理 | 夕颜 出品 | AI科技大本营(ID:rgznai100) [导读] TensorFlow 2.0 于近期正式发布后,立即受到学术界与科研界的广泛关注与好评.此前,我们曾特邀专家回顾了 Te ...

  3. 简单粗暴Tensorflow 2.0

    前言 关于Tensorflow2.0的文章国内外都不少,这里转载国内比较好的一个系列:简单粗暴Tensorflow 2.0 目录 TensorFlow 2.0 安装指南 TensorFlow 2.0 ...

  4. 简单粗暴上手TensorFlow 2.0,北大学霸力作,必须人手一册

    [导读] TensorFlow 2.0 于近期正式发布后,立即受到学术界与科研界的广泛关注与好评.此前,AI 科技大本营曾特邀专家回顾了 TensorFlow 2.0 从初版到最新版本的发展史.今天, ...

  5. 谷歌简单粗暴“复制-粘贴”数据增广,刷新COCO目标检测与实例分割新高度

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 近日,谷歌.UC伯克利与康奈尔大学的研究人员公布了一篇论文 Sim ...

  6. 一起学spring--依赖注入---简单粗暴的例子展示

    欢迎进入<一起学spring>系列博文第二篇, 我们接着上一篇博文'我的第一个spring程序--简单粗暴易懂',我们讲到spring的依赖注入中的设值注入,所谓的设值注入,就是让spri ...

  7. 构建一个分布式操作系统的简单方案—答陈硕的“分布式系统中的进程标识”一文...

    对分布式系统中的进程标识"一文的疑问 刚才看到陈硕先生的一篇blog:"分布式系统中的进程标识",地址:http://www.cnblogs.com/Solstice/a ...

  8. 使用python用什么软件-Python读写Excel表格,就是这么简单粗暴又好用

    Python读写Excel表格,就是这么简单粗暴又好用 2019-04-18 13:45:31 11点赞 107收藏 1评论 最近在做一些数据处理和计算的工作,因为数据是以.csv格式保存的,因此刚开 ...

  9. 简单粗暴地理解js原型链–js面向对象编程

    简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...

  10. 简单粗暴方便好用树莓派FTP远程文件服务器

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 鸣谢 (按照DLGG惯例先鸣谢)感谢yoyojacky漂移菌的技术支持感谢igyang ...

最新文章

  1. 凶猛的飞禽 超跑奥迪
  2. python双星号什么运算_python – 双星号
  3. 使用 COM 风格的编程接口
  4. SpringBoot整合MyBatis-Plus3.1详细教程
  5. SpringBoot 实现固定、动态定时任务 | 三种实现方式 | 附源代码
  6. java.rmi.server_java.rmi.ServerException:服务器线程中发生Remo...
  7. 硬币游戏 Project Euler 232
  8. [译]ASP.NET Core 2.0 带初始参数的中间件
  9. 说实话,写了这么多程序了,还从来没有用JUnit作为单元测试工具测试过,今天就来学习一下
  10. zabbix--自动注册
  11. 微信小程序性能优化总结
  12. 基于KNN的离群点检测算法的Matlab版实现
  13. qq发送信息给对方一定经过服务器,QQ如何把你消息传递给好友的?(上篇)
  14. 计算机网络中出现异常流量,计算机网络下网络流量异常的检测算法
  15. python span 抓取_python – Beautifulsoup获取span内容
  16. 【C语言进阶】字符串函数模拟实现
  17. jwplayer html插件,jw player(网页媒体播放器插件) v2017 最新版
  18. 谷歌浏览器查看当前网页默认字体大小及其他样式
  19. 【码云周刊第 28 期】计算机视觉时代的识图技术
  20. IBMX3250取消raid模式,直接装系统

热门文章

  1. mysql M/S配置小记
  2. 数据驱动的云托管服务最佳范式
  3. StringUtils工具类的常用方法
  4. 409 Longest Palindrome
  5. [译] ES6+ 中的 JavaScript 工厂函数(第八部分)
  6. WWDC上这个神级功能,一言不合又要改变未来购物趋势
  7. AndroidStudio权威教程 AS添加第三方库的6种方式(Jar module so等)
  8. Sql Server导出表结构Excel
  9. 使用opencv自带的融合函数
  10. jquery学习开发资料