免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 无风之谷

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

论坛徽章:
0
发表于 2012-01-12 09:58 |显示全部楼层
网上有不少成熟的应用了,为何还要重新造轮子?比如著名的berkeleydb,fastdb,GigaBASE,gdbm,qdbm 等等,至少这几个是都是我以前用过或者测试过的,这些项目也发展了几年,也相当完善了。楼主的这个  quickdb ,有何特点及优势 ?

论坛徽章:
0
发表于 2012-01-13 14:30 |显示全部楼层
关注一个

论坛徽章:
0
发表于 2012-01-13 21:35 |显示全部楼层
我下载下来好像解压错误

!   C:\Documents and Settings\Administrator\My Documents\Downloads\quickdb-beta1.tar.bz2: 无法创建 shm\jemalloc-2.2.5\include\jemalloc\internal\prn.h

论坛徽章:
0
发表于 2012-01-13 21:38 |显示全部楼层
抱歉 我2了

论坛徽章:
0
发表于 2012-01-14 11:54 |显示全部楼层
回复 1# 无风之谷


    nosql 是做互联网的运维朋友要和hadoop一同关注的技术,从lvs mysql的技术演进

论坛徽章:
0
发表于 2012-01-20 09:12 |显示全部楼层
leveldb也是一款很好的nosql,即是内存又是硬盘型的

论坛徽章:
0
发表于 2012-01-22 18:02 |显示全部楼层
以memcached为例,从设计角度上它是没有数据冗余环节的,其本身作为一个大规模的高性能cache层,加入数据冗余所能带来的只有设计的复杂性和提高系统的开支。当一个ms上丢失了数据之后,app还是可以从数据库中取得数据。不过更谨慎的做法是在某些ms不能正常工作时,提供额外的ms来支持cache,这样就不会因为app从cache中取不到数据而一下子给数据库带来过大的负载。同时为了减少某台ms故障所带来的影响,可以使用“热备份”方案,就是用一台新的ms来取代有问题的ms,当然新的ms还是要用原来ms的IP地址,大不了数据重新装载一遍。

另外一种方式就是提高ms的节点数,然后mc会实时侦查每个节点的状态,如果发现某个节点长时间没有响应,就会从mc的可用server列表里 删除,并对server节点进行重新hash定位。当然这样也会造成的问题是,原本key存储在B上,变成存储在C上了。所以此方案本身也有其弱点,最好 能和“热备份”方案结合使用,就可以使故障造成的影响最小化。

其实若从功能上看,dbcached和Memcached是一样的,前者是一款基于Memcached和NMDB的分布式key-value数据库内存缓存系统,兼容性极佳,Memcached 能做的,dbcached 都能做。除此之外,dbcached 还将“Memcached、持久化存储管理器、NMDB 客户端接口”在一个程序中结合起来,对任何原有 Memcached 客户端来讲,dbcached 仍旧是个 Memcached 内存对象缓存系统,但是它的数据可以持久存储到本机或其它服务器上的 QDBM 或 Berkeley DB 数据库中。
性能上前端 dbcached 的并发处理能力跟 Memcached 相同;后端 NMDB 跟 Memcached 一样,采用了libevent 进行网络IO处理,拥有自己的内存缓存机制,性能不相上下。

写入方面当“dbcached 的 Memcached 部分”接收到一个 set(add/replace/...) 请求并储存 key-value 数据到内存中后,“dbcached 持久化存储管理器”能够将 key-value 数据通过“NMDB 客户端接口”保存到 QDBM 或 Berkeley DB 数据库中。

读取方面当“dbcached 的 Memcached 部分”接收到一个 get(incr/decr/...) 请求后,如果“dbcached 的 Memcached 部分”查询自身的内存缓存未命中,则“dbcached 持久化存储管理器”会通过“NMDB 客户端接口”从 QDBM 或 Berkeley DB 数据库中取出数据,返回给用户,然后储存到 Memcached 内存中。如果有用户再次请求这个 key,则会直接从 Memcached 内存中返回 Value 值。在命中的情况下,读取数据的速度跟普通的 Memcached 无差别,速度一样快。

使用 dbcached不用担心 Memcached 服务器死机、重启而导致数据丢失。即使因为故障转移,添加、减少 Memcached 服务器节点而破坏了“key 信息”与对应“Memcached 服务器”的映射关系也不怕。dbcached 和 NMDB 既可以安装在同一台服务器上,也可以安装在不同的服务器上,多台 dbcached 服务器可以对应一台 NMDB 服务器,其对于“读”大于“写”的应用尤其适用。

目前大部分 NOSQL 实现都基于数据副本的热备份来保证连续的高可用性即保存同一数据的多个副本。一些实现提供了API,可以控制副本的复制,也就是说,当存储一个对象的时候,你可以在对象级指定你希望保存的副本数。通过对数据进行分区可以将失效带来的影响最小化,也将读写操作的负载分布到了不同的机器上。如果一个节点失效了,只有该节点上存储的数据受到影响,而不是全部数据。
同时其提供了不停机或完全重新分区的扩展集群的方法以掌控不断增长的数据。一个算法会在节点加入或失效时通知某一分区的邻居。仅有这些节点受到这一变化的影响,而不是整个集群。

总的来说,伸缩性优先应用是那些必须具备无限可伸缩性的应用,能够不受限制的扩展比更丰富的功能更加重要,在节省人力成本方面这已经是未来技术发展的必然趋势。
  

论坛徽章:
1
巨蟹座
日期:2013-12-30 17:06:34
发表于 2012-02-14 08:52 |显示全部楼层
喜欢这帖子。
七夜的blog我也很喜欢。

论坛徽章:
0
发表于 2012-02-28 23:24 |显示全部楼层
好的冗灾,好的共享内存,好的数据热备

论坛徽章:
0
发表于 2012-03-07 11:18 |显示全部楼层
回复 22# T-Bagwell
个人觉得,要解这个问题可以从系统层做文章。
可以通过掉电保护单元(BBU)解决宕机后数据丢失问题。比如,掉电重启后,先把内存的数据刷到硬盘上。
内存坏掉的话,可以做内存镜像,不过有点难度,需要对内存管理机制进行调整,确保镜像确实是在两条不同的内存条上。或者干脆所有的内存都mirror.

感觉超出了这个软件需要解决的范围了,呵呵


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP