MONGODB应用场景
数据记录如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | /* 1 */ { "_id" : ObjectId( "5b56dd19a171d7e9bfb03ac1" ), "name" : "a" , "BWH" : { "bust" : 100, "waist" : 100, "hips" : 100 }, "character" : [ "afraid of loneliness" , "goodness" , "delicate" , "lovely" ], "others" : { "friends" : { "xt" : 23, "Tom" : 24 }, "location" : { "longitude" : 104.07, "latitude" : 30.67 } } } /* 2 */ { "_id" : ObjectId( "5b56dd19a181d7e9bfb03ac2" ), "name" : "SF" , "BWH" : { "bust" : 100, "waist" : 100, "hips" : 100 }, "character" : [ "lonely" , "easy to satisfy" ], "others" : { "desc" : "a dota hero" } } |
把一个对象当做一个字段存储
如上面的表记录所示,字段 "BWH","character","others" 存的都是一个对象,有的还有嵌套对象。
数组对象
"character" 是一个数组对象
属性固定的对象
"BWH" 是固定的属性的对象
属性不固定的对象
“others”对象中的属性是不固定,在 Java 中可以用Map或org.bson.Document来进行存储
基于位置的数据查询 (空间索引)
将 MongoDB 的查询条件设置为一个区域,数据记录如果有表示Point的字段,可以根据 Point 字段查询出所有在这个区域的记录。
Spring Data MongDB 空间索引 (判断一个点 Point 是否在一个区域 Polygon 内):https://www.cnblogs.com/theRhyme/p/9483076.html
存储文件(如图片)
GridFS 能够存储文件,MongoDB 的文档结构为BJSON(Binary JSON),而 BJSON 格式本身就支持保存二进制格式的数据,因此可以把文件的二进制格式的数据直接保存到 MongoDB 的文档结构中
https://blog.csdn.net/javahongxi/article/details/74131117
MongoDB 作存储方便稳定易扩展,我们自己写的文件存储服务器肯定很 LOW,除了含有巨量图片的大型系统,一般由公司自研图片存储外,大部分情况下,我们用 mongodb 足以应付。
更高的写入负载
https://www.cnblogs.com/imhurley/p/6060229.html
默认情况下,MongoDB 更侧重高数据写入性能,而非事务安全,MongoDB 很适合业务系统中有大量“低价值”数据的场景。但是应当避免在高事务安全性的系统中使用 MongoDB,除非能从架构设计上保证事务安全。
高可用性
MongoDB 的复副集 (Master-Slave) 配置非常简洁方便,此外,MongoDB 可以快速响应的处理单节点故障,自动、安全的完成故障转移。这些特性使得 MongoDB 能在一个相对不稳定(如云主机)的环境中,保持高可用性。
数据量很大或者未来会变得很大
依赖数据库 (MySQL) 自身的特性,完成数据的扩展是较困难的事,在MySQL中,当一个单达表到5-10GB时会出现明显的性能降级,此时需要通过数据的水平和垂直拆分、库的拆分完成扩展,使用 MySQL 通常需要借助驱动层或代理层完成这类需求。
而 MongoDB 内建了多种数据分片的特性,可以很好的适应大数据量的需求。