mongodb适合存储什么数据
㈠ 哪些数据需要用mongodb存储
你说的这种情况在mongdb中直接是横向把所有信息展开的,例如课程信息表,那它会把课程分类也包含进去,只要涉及到页面的查询信息都会包含在这张表中,相当于一个表去处理一个页面的查询。
例如 班级表(1 1班 , 2 2班 , 3 3班)
学生表(01 1 张三 , 02 1 李四 , 03 2 王五) --中间的 1 2 表示班级id
这种是在关系数据库中很常见的设计,但在mongdb中会变为
班级表(1 1班 , 2 2班 , 3 3班)
学生表(01 张三 1 1班 , 02 李四 1 1班 , 03 王五 2 2班)
㈡ mongoDB阃傜敤浠涔埚満钖埚憿锛
镙规嵁瀹樻柟缃戠珯镄勬弿杩帮纴Mongo阃傚悎鐢ㄤ簬浠ヤ笅鍦烘櫙锛
鈼嗙绣绔欐暟鎹锛歁ongo闱炲父阃傚悎瀹炴椂镄勬彃鍏ワ纴镟存柊涓庢煡璇锛屽苟鍏峰囩绣绔椤疄镞舵暟鎹瀛桦偍镓闇镄勫嶅埗鍙婇珮搴︿几缂╂с
鈼嗙紦瀛桡细鐢变簬镐ц兘寰堥珮锛孧ongo涔熼傚悎浣滀负淇℃伅锘虹璁炬柦镄勭紦瀛桦眰銆傚湪绯荤粺閲嶅惎涔嫔悗锛岀敱Mongo鎼寤虹殑鎸佷箙鍖栫紦瀛桦眰鍙浠ラ伩鍏崭笅灞傜殑鏁版嵁婧愯繃杞姐
鈼嗗ぇ灏哄革纴浣庝环鍊肩殑鏁版嵁锛氢娇鐢ㄤ紶缁熺殑鍏崇郴鍨嬫暟鎹搴揿瓨鍌ㄤ竴浜涙暟鎹镞跺彲鑳戒细姣旇缉鏄傝吹锛屽湪姝や箣鍓嶏纴寰埚氭椂鍊欑▼搴忓憳寰寰浼氶夋嫨浼犵粺镄勬枃浠惰繘琛屽瓨鍌ㄣ
鈼嗛珮浼哥缉镐х殑鍦烘櫙锛歁ongo闱炲父阃傚悎鐢辨暟鍗佹垨鏁扮栌鍙版湇锷″櫒缁勬垚镄勬暟鎹搴撱侻ongo镄勮矾绾垮浘涓宸茬粡鍖呭惈瀵筂apRece寮曟搸镄勫唴缃鏀鎸併
鈼嗙敤浜庡硅薄鍙奂SON鏁版嵁镄勫瓨鍌锛歁ongo镄凚SON鏁版嵁镙煎纺闱炲父阃傚悎鏂囨。鍖栨牸寮忕殑瀛桦偍鍙婃煡璇銆
镊铹讹纴MongoDB镄勪娇鐢ㄤ篃浼氭湁涓浜涢檺鍒讹纴渚嫔傚畠涓嶉傚悎锛
鈼嗛珮搴︿簨锷℃х殑绯荤粺锛氢緥濡傞摱琛屾垨浼氲$郴缁熴备紶缁熺殑鍏崇郴鍨嬫暟鎹搴撶洰鍓嶈缮鏄镟撮傜敤浜庨渶瑕佸ぇ閲忓师瀛愭у嶆潅浜嫔姟镄勫簲鐢ㄧ▼搴忋
鈼嗕紶缁熺殑鍟嗕笟鏅鸿兘搴旂敤锛氶拡瀵圭壒瀹氶梾棰樼殑BI鏁版嵁搴扑细瀵逛骇鐢熼珮搴︿紭鍖栫殑镆ヨ㈡柟寮忋傚逛簬姝ょ被搴旂敤锛屾暟鎹浠揿簱鍙鑳芥槸镟村悎阃傜殑阃夋嫨銆
㈢ mongodb数据库适合做什么
mongodb众所周知不支持事务,所以需要强事务的业务根本不能考虑mongodb。
mongodb的优势就是文档存储:
1. 业务经常变动,需要不时的添加字段,那么mongodb比较适合,关系型数据库添加字段的复杂度也还好
2. 嵌套文档,业务数据比较复杂,适合嵌套文档式存储,那么mongodb非常合适,这个关系型数据库比较难搞,虽然MySQL和pg也有文档存储,但MySQL的不成熟,pg毕竟现在生产中使用还是偏少,个人也不了解,这里不谈。但这不仅仅这一点优势,具体下面会细说。
3. upsert支持,查询速度也不慢
4. 高可用的副本集支持
5. 查询语法非常丰富,嵌套文档查询功能非常强大,不是重度用户可能不能理解
下面说说一个具体的使用事例:
项目的一条数据在10kb左右,如果使用关系型数据库那么需要将这条数据拆分成大概几百条左右,建造多个表,设计较复杂,这种数据大概在一百万条左右,想想拆分后在十几亿的数据量就可怕。打平后的数据什么DB也都可以拿下,只是一百万变十几亿比较恐怖而已。
如果采用MySQL存储,每次查询需要使用外键查询多个表,从这些表中拉取数据,性能肯定要下降很多,比不上只在一个表查询,而且只拉取少两个数量级的数据。查询也还好,业务允许可以对结果做缓存,放到redis里去。
但是重点来了,需求要增量更新部分数据,这时候需要更新多个表,根本没法做到原子性(注意事务不是原子操作),当然也可以使用cas等技术补偿,达到最终一致性。但使用mongodb存储只需要update一条数据,对相应的嵌套文档中内容更新,可以做到原子性,是不是很方便?
推荐学习《python教程》
具体说说该项目的难点,查询无法使用缓存,可能会很吃惊,但是业务决定了确实做不了,而且增量更新的量达到上万的QPS,如果不能保证原子性想想多么可怕!
所以mongodb在这里帮了大忙,关系型数据库解决不了这个难题。
有人可能要问,mongodb没有事务,上游数据写入也会有问题,你不可能所有数据都存一个表吧?
当然不是的,我们mongodb里的数据是从MySQL中清洗出来存到mongodb中的,mongodb只做单点的业务需求,综合的数据还是在MySQL中。
此项目我们用了上百个副本集,保证系统的高可用,这些副本集配置只要一条shell就搞定,如果用MySQL的主从不知道怎么配(我自己不懂),估计DBA得忙死,而该项目完全不需要也没用到DBA。
说了这么多mongo的优点,也说说他的缺点:
1. 查询优化器和MySQL没法比
2. 不支持reload,只能冷重启,初始化配置的时候比较麻烦
3. 没有事务,不敢存储第一手数据,多用来做备份数据的存储
mongodb可以做很多事情,取决于你脑洞,性能不差,存一些相对不重要的数据,mongodb嵌套文档功能强大,多看看官方文档挖掘挖掘有用信息,每次都能发现惊喜。
㈣ mongodb是非结构化数据库吗
Mongodb用于存储非结构化数据,尤其擅长存储json格式的数据。存储的量大概在10亿级别,再往上性能就下降了,除非另外分库。
Hbase是架构在hdfs上的列式存储,擅长rowkey的快速查询,但模糊匹配查询(其实是前模糊或全模糊)不擅长,但存储的量可以达到百亿甚至以上,比mongodb的存储量大多了。
㈤ mongodb鏄鍏崇郴鍨嬫暟鎹搴揿悧
MongoDB鏄闱炲叧绯诲瀷鏁版嵁搴撱
MongoDB鍙埚彨鏂囨。鍨嬫暟鎹搴掳纴鎴栭潪鍏崇郴鍨嬫暟鎹搴掳纴鏄涓绉峃oSQL镄勬暟鎹搴掳纴鏄缃戠珯鏁版嵁搴撶殑浼橀夈侻ongoDB灏嗘暟鎹瀛桦偍涓烘枃妗o纴钥屾枃妗f槸鍏锋湁阌鍊煎圭殑鏁版嵁缁撴瀯锛岄敭镄勭被鍨嫔彲浠ユ槸瀛楃︿覆銆佹暟缁勚佸硅薄绛夛纴鍊肩殑绫诲瀷鍙浠ユ槸瀛楃︿覆銆佹暟瀛椼佹棩链熴佹暟缁勭瓑銆
MongoDB镄勬枃妗f暟鎹妯″瀷鎻愪緵浜嗘洿楂樼殑𨱔垫椿镐у拰鍙镓╁𪾢镐э纴锲犱负瀹冨彲浠ヨ交𨱒惧湴阃傚簲澶嶆潅镄勬暟鎹缁撴瀯銆傝繖绉岖伒娲绘т娇寰桵ongoDB闱炲父阃傚悎鐢ㄤ簬Web搴旂敤绋嫔簭銆佺Щ锷ㄥ簲鐢ㄧ▼搴忓拰澶ф暟鎹搴旂敤绋嫔簭銆傛ゅ栵纴MongoDB杩樻彁渚涗简涓板瘜镄勬煡璇㈣瑷鍜岀储寮曞姛鑳斤纴浣垮缑鏁版嵁镆ヨ㈠拰妫绱㈤潪甯告柟渚垮拰楂樻晥銆
MongoDB浣跨敤铡熺悊锛
镓璋撯滈溃钖戦泦钖堚濓纴镒忔濇槸鏁版嵁琚鍒嗙粍瀛桦偍鍦ㄦ暟鎹闆嗕腑锛岃绉颁负涓涓闆嗗悎銆傛疮涓闆嗗悎鍦ㄦ暟鎹搴扑腑閮芥湁涓涓鍞涓镄勬爣璇嗗悕锛屽苟涓斿彲浠ュ寘钖镞犻檺鏁扮洰镄勬枃妗c傞泦钖堢殑姒傚康绫讳技鍏崇郴鍨嬫暟鎹搴挞噷镄勮〃锛屼笉钖岀殑鏄瀹冧笉闇瑕佸畾涔変换浣曟ā寮忋侼ytroMegaRAID鎶链涓镄勯棯瀛橀珮阃熺紦瀛樼畻娉曪纴鑳藉熷揩阃熻瘑鍒鏁版嵁搴揿唴澶ф暟鎹闆嗕腑镄勭儹鏁版嵁锛屾彁渚涗竴镊寸殑镐ц兘鏀硅繘銆
妯″纺镊鐢憋纴镒忓懗镌瀵逛簬瀛桦偍鍦╩ongodb鏁版嵁搴扑腑镄勬枃浠讹纴鎴戜滑涓嶉渶瑕佺煡阆揿畠镄勪换浣旷粨鏋勫畾涔夈傚傛灉闇瑕佺殑璇濓纴浣犲畬鍏ㄥ彲浠ユ妸涓嶅悓缁撴瀯镄勬枃浠跺瓨鍌ㄥ湪钖屼竴涓鏁版嵁搴挞噷銆傚瓨鍌ㄥ湪闆嗗悎涓镄勬枃妗o纴琚瀛桦偍涓洪敭-鍊煎圭殑褰㈠纺銆傞敭鐢ㄤ簬鍞涓镙囱瘑涓涓鏂囨。锛屼负瀛楃︿覆绫诲瀷锛岃屽煎垯鍙浠ユ槸钖勭嶅嶆潅镄勬枃浠剁被鍨嬨傛垜浠绉拌繖绉嶅瓨鍌ㄥ舰寮忎负BSON銆
浠ヤ笂鍐呭瑰弬钥冿细锏惧害锏剧-mongodb
㈥ mongodb是什么
MongoDB是一个基于分布式文件存储 的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构
非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点
类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。