论坛首页 综合技术论坛

NoSQL数据库探讨之一 - 为什么要用非关系数据库?

浏览 118514 次
该帖已经被评为精华帖
作者 正文
   发表时间:2010-03-17  
恩,O(∩_∩)O~,这么觉得KEY-VALUE就是一个大的MAP映射表结构。要是数据库能建成网状那样关联式那就不是一般的强大了。
0 请登录后投票
   发表时间:2010-03-17  
爱看robbin对新技术的评价 很简单 很直白
0 请登录后投票
   发表时间:2010-03-28  
庄表伟 写道
Trustno1 写道
庄表伟 写道
Trustno1 写道
实际上从Codd的观念来说,当今的RMDB其实都不算是关系数据最多就是只是算SQLRMDB.关系数据的第一条就是,数据的关系与底层的实现是没有关系的.数据上存在关系,与你底层使用key-value,还是table还是层次数据或者网状数据,都没有关系。Codd只是说,如果一个数据库能够接受一个关系代数并且给出相关结果,那么就是关系数据库。


正好想问问你,或者说大家来探讨一下:

为什么,Codd的观念,大家都没遵守呢?虽然大家都尊他为关系型数据库之父。

性能,关系数据一大要求就是不能因为性能而改变逻辑结构。比如说一个tuple{id,year,name,salary},按照SQL的做法搞一个表吧,按照id为key.然后存啊存啊存,发现数据越大查询性能越慢,恩然后程序员说我们分表吧,一年一个表.这种情况在关系数据里是不允许的。


如果真是这么简单的原因的话,那么Codd的不允许,岂不是一开始就错了?


用key-value支持关系查询是理论上不能或者太复杂代价太高吧,这方面关系数据库是强项,反之数据存取nosqlDB更快,各有长处。
0 请登录后投票
   发表时间:2010-05-17  
为什么Redis和MongoDB的读写操作差距好大哦,如果两个之间进行互补一下,是不是完美了??
0 请登录后投票
   发表时间:2010-07-20  
pandonix 写道
onlytiancai 写道
比如一个SNS系统,有1亿注册用户,我们可以按用户ID平均分成100组DB。
客户端通过用户ID和一个映射规则去获取它所属的DB组,然后再使用。

因为每组DB只有100w,所以能满足高性能并发读写的需求,慢的话再细分;

对于写缓存,读缓存等是应用的事,可以写应用来实现缓存。
同理,对海量数据高效率存储也可以通过优化mysql或者更细的划分DB组来达到;
每组DB都做热备以达到高可用性;

当用户又增长了100万时,增加一组DB,修改下映射规则就可以满足扩展性。
什么时候该用 nosql db呀



分库会带来太多的维护问题和辐射效应
0 请登录后投票
   发表时间:2010-07-31  
不错的文章,不错的讨论
0 请登录后投票
   发表时间:2010-08-25  
gyro 写道
AreYouOK? 写道
我在工作中也遇到很多问题,关系数据库确实有些力不从心了,但是不使用关系数据库,面对复杂的查询,没有好的解决方案。
从这篇文章的介绍看,我对MongoDB最感兴趣,期待后续。

我的需求和这里列出的Web2.0的网站需求还不太一样。我的场景是:
  • 数据量非常巨大,写操作特别多。数据量可以说是无限的,就看系统能处理多少,如果能处理更多就要接入更多的数据(一般来说我们只接入了部分数据)。
  • 读操作非常少,可以用每天多少次来衡量(就那么几个使用人员,他用的时候才有查询操作),但是一旦有查询操作,往往都是重量级的。
  • 查询操作可以稍微慢点,能在5秒内出来就不错了,如果进行复杂的查询,30秒出来也算不错了。10分钟甚至1个小时才查出结果,是非常不好的,但是能出来总比不能要好。
  • 写操作允许丢失少量数据,但是整个数据库的完整性要有保证
  • 数据最好能够压缩存储


在某个项目里面,数据量大的时候大约每天40、50G,使用postgresql,居然也支撑了下来,但是查询非常慢。接下来的一些项目数据量会更大,可能会有这个量的100倍以上,目前没有好的办法,只能从数据源头先做过滤。

我在1年前,开始尝试进行一些探索,根据产品需求特点,使用自定义的数据格式存储。目前能够解决的问题有:
  • 对数据进行简单的解析和压缩存储
  • 能够对压缩的数据进行简单的查询(指定数据源、时间范围、关键字),查询较慢,但是比SQL有一个好处,就是能看见当前查询到哪个时间点了,而不是像SQL一样,等运行完了才能给用户看到
  • 高性能的写入。目前在我的笔记本上进行简单的测试,每秒2万条的UDP包,丢包率是0.5%,在复杂的环境下性能是会下降的,但服务器的性能会更好

不幸的是,我只有很少的时间能投入到这上面,有时候几个星期都没空去弄,所以到现在还有很多要完善的地方,没有在项目里面实用。有时候我都怀疑这条路是不是走错了。

目前没有解决的问题是高性能的、对数据的复杂查询。数据可以分为2部分,原始数据和格式化后的数据,目前我这里只解决了原始数据的问题,对于格式化数据的复杂查询,还是需要类似关系数据库的功能才行。这也是我对MongoDB比较感兴趣的原因。




感觉上,你这就是一个日志统计系统,解决模型可以看现在大部分的日志统计程序
只保留必要的数据,并且汇总必要的数据,根据你可以开放的查询功能,设计你的数据结构。

就是,原始数据直接缓冲后写入文件,再以专门的分析程序进行分析,分析结果形成报表,解释查询的就是各种报表罢了。
0 请登录后投票
   发表时间:2010-08-27   最后修改:2010-08-27
scgywx 写道
为什么Redis和MongoDB的读写操作差距好大哦,如果两个之间进行互补一下,是不是完美了??


从robbin大哥文中介绍和自己了解的情况来说,redis数据在内存处理,主要解决高读写问题,MongoDB采用BSON松散结构和自己的文件系统,主要解决海量数据存储问题。

可想两者应该有差距了。
0 请登录后投票
   发表时间:2010-10-17  
分析的很好,正有这方面探讨的打算,十分受教了!
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics