免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 21858 | 回复: 58
打印 上一主题 下一主题

怎么解决NOSQL数据库数据持久性问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-10 16:13 |只看该作者 |倒序浏览
      目前的NOSQL主要分为两种,一种是基于内存型的如redis、memcached,一种是基于磁盘型的如Tokyo Tyrant、Tokyo Cabinet、Berkeley DB。
      redis、memcached这类内存型NOSQL。虽然读写效率很高,但是有一个大问题,就是数据库持久性。memcached是一重启进程数据就没了。redis支持两种持久化方式,一种是 Snapshotting(快照)也是默认方式,另一种是Append-only file(缩写aof)的方式。但是这两种效率都不高。 怎样才能做到高效读写,又能保持数据持久性了?
     
     以下这个解决方案是由CU热心网友“七夜”带来的:
     quickdb 是一款基于内存文件系统的 HashTable数据结构的Key-Value数据引擎. . 什么是内存文件系统了?就是操作系统把系统内存划出一部分当作硬盘使用。你可以像操作磁盘那样的操作内存。但效率远远比硬盘来的快多了。通俗叫做内存文件系统,只要服务器不重起数据将一直都在。
     通俗的来讲 redis、memcached是自己申请内存管理数据。当进程重启或者挂了就会丢失数据。quickdb是把实体数据储存在内存文件系统里的。当quickdb进程挂了,  实体数据依然还在。 一个进程可能因为各种原因比如修改了配置文件或者要调试数据。要经常重启。但是一个服务器不可能三天两天的重启或者死机。 一般服务器都是半年,或者 好几年都不重起的。 如果你的服务器经常断电或者死机重启那就不叫服务器了,叫家用电脑了。quickdb可以定期的从内存文件系统的数据同步到磁盘中去。这样当服务器重启,也不会丢失数据。 简单的来讲,进程可能会经常因为各种原因要重启或者挂了,但是服务器不可能经常重启或者死机。这样很大程度上保证了数据持久性,也保证了读写效率。做到鱼和熊掌兼得。
     quickDB Benchmark 性能测试
     写入3145739条数据 花费4.38秒  读取 3145739条数据花费3.88秒


quickdb下载地址:
http://code.google.com/p/loongsso/downloads/detail?name=quickdb-beta1.tar.bz2&can=2&q=#makechanges

Q: 既然是基于内存文件系统的,那leveldb、tokyocabinet等磁盘类的NOSQL可以直接使用了,为啥还用quickdb了?
A: leveldb、tokyocabinet是专门为硬盘特性而优化的NOSQL。比如增加了合并多个写为一次性写,并有内部的内存缓存系统。 如果使用内存文件系统的话,就会造成多次内存浪费。 quickdb不用缓存,不用合并写。做到简单就是快。

Q:  如果服务器内存不够大,是不是用不了quickdb
A:   内存不够大,也可以用quickdb。 内存文件系统可以用tmpfs。tmpfs是当内存不足的时候,把数据交换到swap区。

下面讲解了linux下的三种不同的内存文件系统类型:
(1)ramdisk,使用前需要先创建文件系统,并且调整文件系统大小比较麻烦,需要修改内核引导参数并重新启动操作系统,在繁杂多变的应用与需要 7X24不间断运行的系统来说,并不是一个可以接受的选择.好处是自2.0版本起内核便支持(这也算好处?嗯,确实算,如果你手头真有这样的系统的话)

(2)ramfs,使用前不需要去创建文件系统了,直接通过mount的方式即可挂载上来用,需要的时候可以使用"mount -o remount,maxsize=..."这种方式来调整大小.

(3)tmpfs,同ramfs在表面上基本上一样啦,不同于ramfs针对"物理内存",tmpfs是在虚拟内存下分配空间的,也就是说tmpfs实例中存储的文件既可能存在于物理内存中,也可能存在于交换分区中,具体存在哪里,是由"虚拟内存子系统"来调度的.

纯性能角度讲,ramfs会在进程占用内存使用较多的情况下会优于tmpfs,在没有交换分区或进程占用内存较小而不发生swap行为的情况下,两者性能不会有差异。

本期讨论话题:1,针对“怎么高效解决NOSQL数据库,数据持久性问题”这个话题分享您在实际生产中的解决方案,经验。
                    2,针对“七夜”带来的解决方案,进行讨论。
讨论时间:2012.1.10——2012.2.10
讨论有奖:     我们将对积极参与讨论的网友进行奖励,我们会对提出更优质方案的网友进行评选,优胜者(可以是多名)将获得CU十周年定制背包一个。
                   对积极参与活动网友(有效回复超过3贴),将获得由IBM笔记本内胆包一个(共5个)

十周年背包


IBM内胆包


论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
2 [报告]
发表于 2012-01-10 16:36 |只看该作者
沙发支持下.

论坛徽章:
0
3 [报告]
发表于 2012-01-10 16:37 |只看该作者
看着这个持久化解决方案,比redis的数据持久化 高速,效率。

论坛徽章:
0
4 [报告]
发表于 2012-01-10 16:43 |只看该作者
欢迎大家积极参与~!:wink:

论坛徽章:
0
5 [报告]
发表于 2012-01-10 16:46 |只看该作者
相当给力啊,和redis有的一拼啊~~楼主实力!

论坛徽章:
0
6 [报告]
发表于 2012-01-10 16:47 |只看该作者
这个在文件系统中有类似的做法,对于实时的文件系统,写内存,然后慢慢刷到磁盘中,但是LZ提的这个问题,从需求上来讲有矛盾。。。。我去找找以前做过这方面的优化的资料,到时候提出来讨论讨论

论坛徽章:
0
7 [报告]
发表于 2012-01-10 16:48 |只看该作者
楼主不要忘了,把文档和售后工作做好啊,哈哈

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
8 [报告]
发表于 2012-01-10 16:49 |只看该作者
回复 1# 无风之谷
关注NoSQL数据库话题

   

论坛徽章:
0
9 [报告]
发表于 2012-01-10 16:49 |只看该作者
太需要这东西了,晚上测试一下!~~

论坛徽章:
0
10 [报告]
发表于 2012-01-10 16:49 |只看该作者
马克
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP