T-Bagwell
发表于 2012-03-07 13:07
lihualoveyou 发表于 2012-03-07 11:18 static/image/common/back.gif
回复 22# T-Bagwell
个人觉得,要解这个问题可以从系统层做文章。
可以通过掉电保护单元(BBU)解决宕机 ...
掉电重启以后内存中的数据还会存在?
lihualoveyou
发表于 2012-03-07 16:37
T-Bagwell 发表于 2012-03-07 13:07 static/image/common/back.gif
掉电重启以后内存中的数据还会存在?
通用的服务器估计不行,BIOS启动之后好像会有初始化内存的操作。不过,现在的磁盘阵列都是用这种方式来保证缓存数据不丢失的。
hobbs136
发表于 2012-03-09 16:38
第一 我觉得不要试图去搞一些nosql不擅长的功能,例如保证acid的事务特性。
第二 我认为你的持久化方案简直是糟糕透顶了。我逐条分析
1.
"什么是内存文件系统了?就是操作系统把系统内存划出一部分当作硬盘使用。你可以像操作磁盘那样的操作内存。但效率远远比硬盘来的快多了"
首先相比直接操作内存来说,这增加了代码的复杂度。用文件形式存储key和value,那你不得不自己去管理偏移量了,可能你选择管理空闲块链表,
但是无论如何,这都会增加代码量,增加cpu的处理周期。
"当quickdb进程挂了,实体数据依然还在。一个进程可能因为各种原因比如修改了配置文件或者要调试数据。要经常重启。但是一个服务器不可能三天两天的重启或者死机。 一般服务器都是半年,或者好几年都不重起的。如果你的服务器经常断电或者死机重启那就不叫服务器了,叫家用电脑了。quickdb可以定期的从内存文件系统的数据同步到磁盘中去。这样当服务器重启,也不会丢失数据"
上面这句话毛病最多。"进程挂了,实体数据依然还在,这根本不算一个优点"。设计良好的服务程序怎么可能自己挂掉了?那么多nosql数据库都没有提过这点。那么多sql数据库也没有提过这点。修改配置文件或者调试数据,要经常重启。靠,进程正常结束时操作系统会将所有需要持久化的数据冲刷进硬盘的。
"但是一个服务器不可能三天两天的重启或者死机。一般服务器都是半年,或者好几年都不重起的。如果你的服务器经常断电或者死机重启那就不叫服务器了,叫家用电脑了"。 这好像是服务器推销员的口吻。各种数据库要考虑的就是非正常宕机的情况,虽然宕机的几率很低,但是各种数据库都为此牺牲了很多。但是这个quickdb却不是,且看下面这句话。
"quickdb可以定期的从内存文件系统的数据同步到磁盘中去,这样当服务器重启,也不会丢失数据"。就这句话,你都没说这个时间窗口到底是多大,用户到底会损失多少数据啊。
"这样很大程度上保证了数据持久性,也保证了读写效率。做到鱼和熊掌兼得"。这句话完全不靠谱。因为下面又说,每天备份一次,苍天,我还是用我的redis好了。
第三 那个测试毫无意义,因为没有考虑并发这种情况。
第四 还需要特殊的运维操作,就是创建内存文件系统,增加系统整体复杂度。
第五 看着那个id为“我要思考”的家伙的留言我就想笑,他大概是刚开始思考。
第六 我的建议
认清各种事物的用途,没有一个nosql数据库用内存文件系统来存储文件,所以不要标新立异。潜下心来,好好读一下开源程序的代码。从设计上,利用现有的软件解决实际中的问题。现在存储的问题就是cap的问题,请沿着这个方向走。
hitsubunnu
发表于 2012-03-09 17:05
hobbs136 发表于 2012-03-09 16:38 static/image/common/back.gif
第一 我觉得不要试图去搞一些nosql不擅长的功能,例如保证acid的事务特性。
第二 我认为你的持久化方案简直 ...
就这位兄弟说的话 靠谱
jiyuwoaa
发表于 2012-04-03 21:09
支持~!!!!!!!!!!
大邪神
发表于 2012-04-06 12:08
不用啊
epstar
发表于 2012-11-19 10:26
谢谢楼主啊,受益匪浅啊!