关键字: memcachedb

memcachedb是一个由新浪网的开发人员开放出来的开源项目,给memcached分布式缓存服务器添加了Berkeley DB的持久化存储机制和异步主辅复制机制,让memcached具备了事务恢复能力、持久化能力和分布式复制能力,非常适合于需要超高性能读写速度,但是不需要严格事务约束,能够被持久化保存的应用场景,例如memcachedb被应用在新浪博客上面。

memcachedb给memcached添加了一些数据库才具备的特性,但是我们还不能说memcachedb已经是一个数据库了,这是因为memcached不支持内存对象的遍历操作,当然更加不能支持复杂的查询操作,只能支持根据已知的key去查询对应的value。因此如果想把memcachedb当成一个高性能的分布式内存数据库来使用的话,查询的问题就没有办法解决,只能在应用程序里面配合其他方案做一些折衷。

然而memcached的另外一个开源项目完美的填补了这一个缺陷,就是memcache_engine。

memcache_engine是一个MySQL数据库的存储引擎,目前只支持MySQL5.1数据库,他能够把memcachedb作为MySQL数据库的一个存储引擎和MySQL集成起来,让用户通过标准的SQL查询语句访问memcachedb中存放的数据,请看如下示例:

Sql代码 复制代码
  1. CREATE TABLE `a` (
  2. `a` int(11) NOT NULL DEFAULT '0',
  3. `b` int(11) DEFAULT NULL,
  4. `c` int(11) DEFAULT NULL,
  5. PRIMARY KEY (`a`)
  6. ) ENGINE=MEMCACHE DEFAULT CHARSET=latin1
  7. CONNECTION='localhost:6666\;localhost:6688';
CREATE TABLE `a` (`a` int(11) NOT NULL DEFAULT '0',`b` int(11) DEFAULT NULL,`c` int(11) DEFAULT NULL,PRIMARY KEY (`a`)) ENGINE=MEMCACHE DEFAULT CHARSET=latin1
CONNECTION='localhost:6666\;localhost:6688';

创建表a,存放在分布式memcached server:localhost:6666和localhost:6688当中。然后我们就可以使用标准的SQL语句随意的进行CRUD操作去使用memcachedb了,这实在是太酷了!有了memcache_engine,我们就可以用SQL去访问memcached,有了memcachedb,我们就不必担心数据丢失问题,事务恢复问题了,简直是绝配,让memcached真正成为了一个高性能的分布式数据库系统了。目前memcache_engine项目还是早期试验阶段,让我们期待memcache_engine项目早日发布正式版本吧!

顺便多说几句:最近一年来,特别是最近一个月以来,围绕memcached的开源项目发展的非常非常活跃:

1、最近刚刚发布了memcached的新的高性能C客户端接口: libmemcached

2、由于有了libmemcached,该组织又发布了memcache_engine存储引擎,cool!

3、由于libmemcached的发布,不到一周时间,ruby的两个崭新的memcache client就问世了,他们是Caffeine和New memcache-client,让ruby访问memcached的速度大幅度提高,请看:libmemcached发布了,ruby访问memcached提速20倍

4、memcachedb发布了,这是中国的互联网公司贡献的开源项目

以上几个项目都是在2008年1月发布的,真的不是一般的繁荣阿。再加上之前发布的新的支持异步访问的Java Memcached API和C#接口,可以说除了Python,其他主流非主流编程语言都可以使用memcached了。其实即便是Python还没有公布出来的开源接口,我们也知道国内的web2.0网站豆瓣就是使用Python访问memcached,并且支持了极大的访问量,因此目前围绕memcached的开源项目发展的情况非常的繁荣。

memcached最近两年这么受欢迎,其实和互联网web2.0的流行有很大的关系,web2.0网站通常需要个性化页面,依赖于页面局部和数据细颗粒度的缓存来提升性能,并且web2.0网站流量都很大,因此memcached这种高性能分布式缓存服务器就大行其道了。

当然我觉得最具有革命意义的还是memcache_engine和memcachedb这两个项目的发布,他们能够让memcached的用途不仅仅限于缓存服务器而已,而是能够真正充当分布式数据库来使用了,这无异是诸多大流量web2.0网站和开发人员的福音阿。

<script type="text/javascript"><!-- google_ad_client = "pub-4348265167276910"; /* 468x60, 个人博客 */ google_ad_slot = "2046406163"; google_ad_width = 468; google_ad_height = 60; //--> </script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script><script src="http://pagead2.googlesyndication.com/pagead/expansion_embed.js"></script><script src="http://googleads.g.doubleclick.net/pagead/test_domain.js"></script><script src="http://pagead2.googlesyndication.com/pagead/render_ads.js"></script><script>google_protectAndRun("render_ads.js::google_render_ad", google_handleError, google_render_ad);</script>

Warp framework - 一个相当有前途的Java轻 ... | JavaEye网站的RoR性能优化经验谈
  • 12:05
  • 浏览 (16842)
  • 论坛浏览 (7066)
  • 评论 (17)
  • 分类: Tech
  • 相关推荐
评论
17 楼 robbin 2008-01-24   引用
pi1ot 写道
robbin 写道
用MySQL的好处在于,通过MySQL的系统数据字典和表索引,给memcachedb里面的数据“创建了一份清楚的地图”,有了这份地图在手,我们就不必对memcachedb盲人摸象了。

不过原来的双向八车道也缩水成了半边断路施工的101国道?

这个一个很正常的trade off,如果这点trade off都没有,那你让Oracle/DB2们还混什么混?

16 楼 pi1ot 2008-01-23   引用
robbin 写道
用MySQL的好处在于,通过MySQL的系统数据字典和表索引,给memcachedb里面的数据“创建了一份清楚的地图”,有了这份地图在手,我们就不必对memcachedb盲人摸象了。

不过原来的双向八车道也缩水成了半边断路施工的101国道?

15 楼 robbin 2008-01-23   引用
iunknown 写道
现在的问题是 memcache_engine 还未有具体的数据出来。
前面 robbin 提到的这个问题,在 memcache_engine 还不知道是怎么解决的。而且解决方案的性能还未知。

引用
memcached不支持内存对象的遍历操作,当然更加不能支持复杂的查询操作,只能支持根据已知的key去查询对应的value。因此如果想把memcachedb当成一个高性能的分布式内存数据库来使用的话,查询的问题就没有办法解决,

其实这到不难,MySQL有一个系统数据库叫做mysql,里面存放系统表,包含了MySQL数据库里面每个用户数据库里面的对象的meta信息,因此首先是把memcachedb映射到MySQL的相关表结构上。然后在具体的CRUD操作上面,MySQL会给每个数据库表创建索引,即便你没有创建用户索引,主键列也有索引,此外每条记录还有时间戳属性,这些信息都被保存到该表的索引列里面,具体来说会写在数据库的数据目录下面的索引文件。

当对memcachedb类型的表进行SQL查询的时候,首先是从系统表获取该表的meta信息,例如字段什么的,然后到索引里面去查找符合条件的记录,最后根据符合条件的记录的主键id去memcachedb里面get就行了。当然你会问,如果没有索引,导致全表扫描怎么办? 那我想,对该表的全表扫描也无非是根据一堆主键id对memcached发送multiget操作而已,还是比传统的读数据库表,引起硬盘IO来得快很多。

用MySQL的好处在于,通过MySQL的系统数据字典和表索引,给memcachedb里面的数据“创建了一份清楚的地图”,有了这份地图在手,我们就不必对memcachedb盲人摸象了。

14 楼 iunknown 2008-01-23   引用
现在的问题是 memcache_engine 还未有具体的数据出来。
前面 robbin 提到的这个问题,在 memcache_engine 还不知道是怎么解决的。而且解决方案的性能还未知。

引用
memcached不支持内存对象的遍历操作,当然更加不能支持复杂的查询操作,只能支持根据已知的key去查询对应的value。因此如果想把memcachedb当成一个高性能的分布式内存数据库来使用的话,查询的问题就没有办法解决,

13 楼 pufan 2008-01-23   引用
pufan 写道

而且更糟糕的是mysql cluster和mysql replication是两个不同的概念,还混为一谈:

抠字眼有意思吗,我说的是mysql集群,mysql cluster和mysql replication都是他的实现,搞java编程的,抽象和具体就这么难分清楚?

12 楼 pufan 2008-01-23   引用
robbin 写道

memcachedb是用来解决特定应用场景的特定问题的,而不是用来和传统的关系数据库PK玩的,两者的应用场景是不同的,所要解决的问题也不一样,硬扯在一起说XX也可以替代XX,那就是辩论收的纯辩论技巧了,不是在讨论技术了。

memcachedb自然就是cache+db了,当然要和db+cache的方案pk。要拿特定应用场景说事,那就比较一下两种方案的优劣,memcachedb得最大缺点就是管的太多,就像ejb2,有重量级容器的坏味道。

robbin 写道

memcachedb和mysql cluster又是两个应用于不同场景,解决不同问题的技术,你扯到一起来,硬要说mysql clustre可以替代memcachedb,他们还真没啥可比性,而且也无法替代,这个例子举得真糟糕,而且更糟糕的是mysql cluster和mysql replication是两个不同的概念,还混为一谈:

memcachedb是解决高性能读写问题的,比方说某些大型网站应用,每秒钟有超过1万次的写请求,10万次的读请求,那你就得用memcached来缓存数据了,这个时候你用mysql cluster或者mysql replication根本无济于事,,硬盘IO WAIT就把你所有的MySQL线程阻塞了,用memcachedb是为了能够解决数据库服务器的IO性能瓶颈的;

反过来说,某复杂的企业应用,每秒钟有超过3000次的SQL查询请求,这个时候memcachedb根本就用不上,因为memcachedb是不支持SQL查询的,那单台数据库服务器的CPU计算量也不足以支撑这么大的查询运算,所以replication或者cluster到n台计算器上面,去分担CPU负载,用mysql replication是为了能够解决数据库服务器的CPU性能瓶颈的。

一个是解决IO瓶颈的,一个是解决CPU瓶颈的,你怎么替代?

再说一遍,要比较的是cache+db而不是db,不要老是跑题,因此你写的这一大堆我就不一一回了。

集群有高可用和负载均衡等分类,难道这个还要讨论?

11 楼 robbin 2008-01-23   引用
pufan 写道

1.要和cache+db的方案比优势,而不是仅仅比较db。cache+db的好处在于分层逻辑清晰,cache是一层,db是一层,比方说,那天Berkeley DB不爽了,换mysql、postgresql都是可替代的选择,cache层更换也是一个道理。若要用楼主的方案,好了,没有cache层,绑死在数据库上了,你要换数据库,那cache层代码是不是还得新写。

memcachedb是用来解决特定应用场景的特定问题的,而不是用来和传统的关系数据库PK玩的,两者的应用场景是不同的,所要解决的问题也不一样,硬扯在一起说XX也可以替代XX,那就是辩论手的纯辩论技巧了。

pufan 写道

2.关于分布式方案,要选择,拿mysql来说,我肯定会选择mysql官方提供的集群方案,而不是一些非专业数据库开发人士提供的所谓的透明的高效率的分布式方案,真要用起来,怎么死的都不清楚。

就拿楼上的例子来说,用memcache集群+mysql集群(主从复制)一样满足需求,不但系统扩展性好,用的也放心。

memcachedb和mysql cluster又是两个应用于不同场景,解决不同问题的技术,硬要说mysql cluster可以替代memcachedb,他们还真没啥可比性,而且也无法替代,这个例子举得真糟糕,而且更糟糕的是mysql cluster和mysql replication是两个不同的概念,还混为一谈:

memcachedb是解决高性能读写问题的,比方说某些大型网站应用,每秒钟有超过1万次的写请求,10万次的读请求,那你就得用memcached来缓存数据了,这个时候你用mysql cluster或者mysql replication根本无济于事,,硬盘IO WAIT就把你所有的MySQL线程阻塞了,用memcachedb是为了能够解决数据库服务器的IO性能瓶颈的;

反过来说,某复杂的企业应用,每秒钟有超过3000次的SQL查询请求,这个时候memcachedb根本就用不上,因为memcachedb是不支持SQL查询的,那单台数据库服务器的CPU计算量也不足以支撑这么大的查询运算,所以replication或者cluster到n台计算器上面,去分担CPU负载,用mysql replication是为了能够解决数据库服务器的CPU性能瓶颈的。

一个是解决IO瓶颈的,一个是解决CPU瓶颈的,你怎么替代?

10 楼 pufan 2008-01-23   引用
robbin 写道
pufan 写道
不看好,和常见的cache集群+mysql集群(主从复制)比没看出好处在哪里,反倒是给人以大一统的感觉,照这个思路,把web server也容纳到memcache中去岂不是更好。

好处有两点:

1、远远超过数据库的高性能

其实这是废话,如果数据库IO性能够好的话,这个世界上就不会有DB Cache这种东西。比方说新浪博客每天上亿的点击量,而博客这东西很难动态页面静态化,你不上Cache Server试试看?

2、分布式

你见过Oracle Grid可以轻松的分布式的吗?他底层的数据库文件还是要单点存储的,但是memcachedb天然就是分布式的,你可以把他分布到几十台上百台服务器上面去。这个优势对于上亿的大负载网站的好处根本不用多说什么废话。

1.要和cache+db的方案比优势,而不是仅仅比较db。cache+db的好处在于分层逻辑清晰,cache是一层,db是一层,比方说,那天Berkeley DB不爽了,换mysql、postgresql都是可替代的选择,cache层更换也是一个道理。若要用楼主的方案,好了,没有cache层,绑死在数据库上了,你要换数据库,那cache层代码是不是还得新写。

2.关于分布式方案,要选择,拿mysql来说,我肯定会选择mysql官方提供的集群方案,而不是一些非专业数据库开发人士提供的所谓的透明的高效率的分布式方案,真要用起来,怎么死的都不清楚。

就拿楼上的例子来说,用memcache集群+mysql集群(主从复制)一样满足需求,不但系统扩展性好,用的也放心。

9 楼 pi1ot 2008-01-23   引用
应该说memcached赢在简单高效上,所以继续保持memcached的简单和高效是很重要地。

8 楼 robbin 2008-01-23   引用
pufan 写道
不看好,和常见的cache集群+mysql集群(主从复制)比没看出好处在哪里,反倒是给人以大一统的感觉,照这个思路,把web server也容纳到memcache中去岂不是更好。

好处有两点:

1、远远超过数据库的高性能

其实这是废话,如果数据库IO性能够好的话,这个世界上就不会有DB Cache这种东西。比方说新浪博客每天上亿的点击量,而博客这东西很难动态页面静态化,你不上Cache Server试试看?

2、分布式

你见过Oracle Grid可以轻松的分布式的吗?他底层的数据库文件还是要单点存储的,但是memcachedb天然就是分布式的,你可以把他分布到几十台上百台服务器上面去。这个优势对于上亿的大负载网站的好处根本不用多说什么废话。

7 楼 pufan 2008-01-23   引用
不看好,和常见的cache集群+mysql集群(主从复制)比没看出好处在哪里,反倒是给人以大一统的感觉,照这个思路,把web server也容纳到memcache中去岂不是更好。

6 楼 robbin 2008-01-23   引用
C3PO 写道
内存数据库?何必呢

建个内存盘(memdrive),把MySQL设置成数据库文件存放到内存盘里。再写个脚本每隔一段时间把instance拷到硬盘上。完事

你写个脚本出来给我看看? 不要说你把整个内存里面的instance热拷贝到硬盘上了,你就是把innodb里面的数据在线热备份出来,你都办不到! 因为你必须考虑内存数据的同步问题。所以innobase的hotbackup工具才能卖1万多块钱。

再者memcachedb是分布式的,可以把n台物理服务器组成一个逻辑数据库,那你MySQL你怎么给我分布式到n台机器的内存里面去? Oracle的Grid都办不到,不要说你可以办到。

5 楼 pi1ot 2008-01-23   引用
就算有资料,有的用么。

4 楼 andyao 2008-01-23   引用
淘宝的tbstore,使用的Berkeley DB,也是一个非常优秀的cache系统,淘宝内部大量使用。就是网上资料比较少

3 楼 sofire 2008-01-23   引用
以Sql方式查询DB4,会快吗?

2 楼 lgn21st 2008-01-22   引用
robbin老大近期实在太~~~实在是没有台词了。
Robbin出品,必属精品!

1 楼 ken1984 2008-01-22   引用
帮别人做个广告,想了解新浪的团队开发的开源产品,可去此BLOG:http://blog.s135.com/
目前它们又有一个新的开源项目发布了

memcache_engine + memcachedb = 高性能分布式内存数据库相关推荐

  1. 纯java分布式内存数据库_高性能分布式内存数据库VoltDB介绍

    VoltDB数据库是一个分布式,可扩展,shared-nothing的内存数据库.使用JAVA 写的存储过程来定义事务.使用标准SQL访问数据,使用并行的单线程处理方式确保数据一致性,同时避免了传统数 ...

  2. 分布式内存数据库的CAP-BASE原理

    一.传统的关系型数据库遵循ACID规则: 事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性: 1.A (Atomicity) 原子性 原子性很容易理解,也就是说事务里的 ...

  3. 高性能分布式缓存Redis(缓存分类 安装 数据类型选择和应用场景 发布订阅 事务 Lua脚本 慢查询日志)

    高性能分布式缓存Redis 高性能分布式缓存Redis 1. 缓存发展史&缓存分类 1.1 大型网站中缓存的使用 1.2 常见缓存的分类 1.3 分布式缓存选型方案对比 2. Redis概述& ...

  4. 海量数据处理_国家重点研发计划“面向异构体系结构的高性能分布式数据处理技术与系统”简介...

    技术发展现状 近年来,数据规模快速增长,使得Hadoop.Spark等大数据批处理系统在现实中得到了广泛应用.同时,应用对数据处理时效性需求不断加强,促使诸如Flink的大数据流式处理系统应运而生.现 ...

  5. 高可用高性能分布式文件系统FastDFS实践Java程序

    在前篇 高可用高性能分布式文件系统FastDFS进阶keepalived+nginx对多tracker进行高可用热备 中已介绍搭建高可用的分布式文件系统架构. 那怎么在程序中调用,其实网上有很多栗子, ...

  6. 腾讯高性能分布式路由技术,亮相亚太网络研讨会APNet

    亚太网络研讨会(APNet)汇聚亚太地区计算机网络和系统领域最优秀的研究人员,分享各自最新的研究成果,讨论当前最前沿的热点研究问题.2020年8月3-4号,为期两天的第四届亚太网络研讨会(APNet' ...

  7. voyage java_GitHub - yezilong9/voyage: 采用Java实现的基于netty轻量的高性能分布式RPC服务框架...

    Voyage Overview 采用Java实现的基于netty轻量的高性能分布式RPC服务框架.实现了RPC的基本功能,开发者也可以自定义扩展,简单,易用,高效. Features 服务端支持注解配 ...

  8. python分布式框架_高性能分布式执行框架——Ray

    Ray是UC Berkeley RISELab新推出的高性能分布式执行框架,它使用了和传统分布式计算系统不一样的架构和对分布式计算的抽象方式,具有比Spark更优异的计算性能. Ray目前还处于实验室 ...

  9. 高性能分布式锁-redisson

    RedLock算法-使用redis实现分布式锁服务 译自Redis官方文档 在多线程共享临界资源的场景下,分布式锁是一种非常重要的组件. 许多库使用不同的方式使用redis实现一个分布式锁管理. 其中 ...

最新文章

  1. 基于 OpenCV 的表格文本内容提取
  2. Cling旨在提供一款高性能的C++ REPL
  3. 唐骏管理学之感动员工
  4. linux下的rman自动备份脚本,LINUX上RMAN自动备份脚本
  5. js localdate上一个月_moment.js格式化日期,获取前一个月的时间
  6. 落地华东总部、上线创新云、签约AIoT产业基金……京东云南京“新动作”
  7. Nginx详细安装部署教程
  8. 那些决定模型上限的操作
  9. C++ 学习笔记之——输入和输出
  10. oracle错误号大全(查询ora错误号以及解决方法技巧)
  11. ubuntu vim中输入中文
  12. 指定linux软件安装路径
  13. hp linux还原系统还原,酷越一键备份还原 惠普电脑系统还原
  14. 微信开发:账号申请,AppID、AppSecret 获取方式
  15. 老司机带你检测相似图片【转】
  16. 一个好用的PLC调试神器
  17. 【情人节警报】看我如何智斗陌陌情爱骗子
  18. 005 偶数分频,奇数分频,倍频
  19. OpenMeetings安装
  20. 释放已删除的InnoDB磁盘空间

热门文章

  1. Ivan and Burgers(CF-1100F)
  2. 理论基础 —— 线性表 —— 顺序表
  3. 纪念品分组(洛谷-P1094)
  4. 9.4 LSMW程序创建操作手册 第8 9 10 11步
  5. python上传文件 request_Python request 上传文件
  6. 安卓 spinner下拉框 做模糊查询_用图表控件做一个简单的员工信息查询系统
  7. 利用uiautomator2刷金币
  8. pytorch中Mini-batch批处理实现函数xx.unsqueeze(0)
  9. (STTN)Learning Joint Spatial-TemporalTransformations for Video Inpainting
  10. base64还原_冰蝎3.0流量分析与还原