Mongodb不支持事务,到底适用什么场景

羊望 发布于 2016/12/13 16:00
阅读 1K+
收藏 1

最近在学习Mongodb,都说性能好,支持大数据等,但就是有一事不解:

我们通常做系统,都需要保证数据的原子性、一致性,但是Mongodb本身不支持事务,网上有说法说因为事务会导致性能的下降,那是不是mongodb不适合做应用系统呢,或者说它应该用在哪些地方,因为我一直认为,做任何东西,都应该保证数据的完整性,不然即使性能再高,数据出问题也不行啊。

但是mongodb现在这么流行,必有它的用武之处,小弟请教各位高手,Mongodb不支持事务,到底适用什么场景,或者说,有哪些应用场景,可以允许数据库不支持事务,谢谢了。

加载中
0
Feng_Yu
Feng_Yu

NoSQL的数据库都有这样的共性,适合存放稀疏类型的数据,不确定数据结构,并且表(mongodb称为collection)之间无强依赖关系。

也就是说,不适合存储关系型数据,适合存放非关系型的数据。比如时序数据。

0
宏哥
宏哥

适用 

脑残的场景

yak
yak
回复 @eechen : 命令行是啥?能吃吗? 不过我会杀猪,那么问题来了,你会杀猪吗? 估计现在php的工资交完房租就吃不起猪肉了,
eechen
eechen
回复 @yak : 你会用命令行么?不过我猜使用Windows的Java开发者应该很不习惯吧,哈哈.
yak
yak
回复 @eechen : 原来 HeidiSQL 这么高大上啊,我还以为是直升机呢 那么问题来了,我没有heidisql,怎么查数据啊,在线等
eechen
eechen
回复 @yak : 连HeidiSQL都拼不对你真是有够差劲的了.我会告诉你MariaDB的Windows版自带HeidiSQL么?而且HeidiSQL现在可以管理MySQL/PostgreSQL/SQL Server 3种数据库.
yak
yak
回复 @eechen : 你这个脑残离开hidisql 就不知道数据库是啥了
下一页
0
fotomxq
fotomxq

金融类应用非常适用,尤其是要求超高并发的。

不过实际环境下这类应用又要求安全可靠性,所以一般要配合多种数据存储方式。

Mongodb碎片、依赖内存,所以如果出现某些特殊意外可能会出现数据遗失;

关系型数据库虽然具备事务处理,可靠程度高,但性能不占优。

例如一个金融股票系统,用mysql存储历史数据,Mongodb临时存储当天分时数据,加快读写。晚上收盘后再把Mongodb数据整理写入mysql。

fotomxq
fotomxq
回复 @conc : 主要是搭配使用,分时数据交给这数据库,能提高不少效率。像历史数据,还是交给传统关系数据库比较稳妥。 交易方面就不适合用这个了,因为对事务要求比较多。
conc
conc
“金融类应用非常适用”……,金融公司敢用mongo?不是吧。
0
业余编程人士
业余编程人士

适合:某种数据提取十分频繁,你又不想在oracle里面join来join去浪费处理时间,然后你就存在mongodb里面把以前在oracle中要join的几个列存成一个列合并在一个列上然后查的时候直接查一个列出来 说白了就是节约时间:eg :{name:leilei,warehouse:beijing, order:23} ,比如这三个字段以前分散在oracle的好几个表里面你要取得时候要join,现在你发现这个信息用户访问十分频繁你存的时候就存着三个j在mongo里面,这样就不用去oracle里join拿了而且又没有事务又没有锁理论上相对快

不过说白了,其实关系型数据库够用了,那些使用nosql的个人以为没必要。获取他们设计的程序有问题或许不会调优数据库 导致性能低下所以要尝尝新玩意吧

0
yak
yak
适合树型数据,比如无限分类,网易评论盖楼,多级权限  这种用传统关联表做的话要么递归查询,要么要写很多额外的代码, 用mogodb只要拼字符串把键名拼对了就可以了
乌龟壳
乌龟壳
回复 @eechen : 这我就不评价了,不是干这行的
eechen
eechen
回复 @乌龟壳 : "引用评论"我觉得本来就不符合关系数据库的设计,像segmentfault.com/知乎/百度贴吧/腾讯新闻这些用的"回复评论"更符合关系数据库的设计:一篇新闻对应多条评论,一条评论对应多条回复."引用评论"主要还是养猪网那些无聊且偏低俗的受众才喜欢用.
乌龟壳
乌龟壳
回复 @eechen : 我没做过类似系统,不知道换个思路行不行,就是后台都是严格遵循范式设计的,但是前台实际页面读的是静态化的结果,当后台更新一次就刷新一次整个页面静态化的结果
eechen
eechen
回复 @乌龟壳 : 我这种方法的缺点就是:输出引用其他评论的评论时可能会额外触发一次 WHERE id IN ($pids) 查询.这时可以考虑用/dev/shm/sqlite或memcached/redis缓存评论内容.如果当前页评论查询结果中或者缓存中存在被引用的评论,则直接从里面读取.
eechen
eechen
回复 @乌龟壳 : OSC这样的设计引用时冗余量很多,而且不灵活.比如有一条评论其引用的评论因为违反规定被屏蔽掉了,那该条评论因为存储时包含了那条被屏蔽的评论,这时该怎么处理?而我这种方法在这种情况下不会显示那条已经被删掉的评论.
下一页
0
changnet
changnet
游戏。玩家之间的数据并无关联
0
宏哥
宏哥

回复 @eechen :  

炒个鸟

宏哥事业越做越大

你还在吵 php

我都要转java了

eechen
eechen
回复 @回去干活 : 你应该分享下你从C++转PHP的心得体会。
回去干活
回去干活
回复 @eechen : 转java是对的.我支持!
eechen
eechen
你转ASP都不关我事
0
宏哥
宏哥

引用来自“fotomxq”的评论

金融类应用非常适用,尤其是要求超高并发的。

不过实际环境下这类应用又要求安全可靠性,所以一般要配合多种数据存储方式。

Mongodb碎片、依赖内存,所以如果出现某些特殊意外可能会出现数据遗失;

关系型数据库虽然具备事务处理,可靠程度高,但性能不占优。

例如一个金融股票系统,用mysql存储历史数据,Mongodb临时存储当天分时数据,加快读写。晚上收盘后再把Mongodb数据整理写入mysql。

一看就知道没干过金融
fotomxq
fotomxq
宏哥威武… 话说我自己开发的金融平台就这么搞的………之前用mysql读写,速度慢成狗了,改用这种数据存储后好多了。 看来还得继续学习…
panmingguang
panmingguang
金融 一般都是db2 或者 oracle
0
小虫0302
小虫0302
存日志之类的,比方osc的动态,把各类动态组装好直接存,以后就可以直接读出来解析
0
f
freezingsky
mongo要求你对数据建模。mysql等要求你对实体模型建模
返回顶部
顶部