为了理解NOSQL,不仿先看下一个应用系统数据是怎么流动的。
数据库读取硬盘数据,生成查询结果,发送到应用程序变成键值对集合,然后程序中读取这些键值对,组装成相应的序列化对象,再传输到客户端呈现。
但很多系统就是直接数据的存取,并没有多少复杂的业务逻辑,比如电商系统的商品展示,页面只要读取相应的商品信息就行了,那是不是有什么办法,让数据直接到达客户端?答案是肯定的,比如微软提供Sql Server的ODATA接口,不过ODATA还是需要关系数据库支撑的,Sql Server到了2016版本才支持InMemory,如果不使用InMemory,性能上肯定是没有太大的变化,只是说多了一层封装,可以少写点WEB服务。另外就是基于NOSQL的MongoDB和Ridis之类的,这类产品集合了数据缓存的功能,而且原生返回Json对象,不需要转换就可以直接推送到客户端,这样就大大提高了程序的性能,和开发效率。
以MongoDb为例,看下NOSQL数据库提供了哪些功能。
1、CRUD操作
除了正常的添加删除,还提供批量写入,文本搜索,空间数据查询。数据的检索功能,大大降低了应用系统的数据过滤的压力,同时也确保了数据检索的准确性。
2、聚合
有管道方式和mapReduce方式进行数据汇总,获取分组数据。
3、数据结构
提供结构定义,数据检验,以保证数据的完整性。
4、事务
数据的完整性,减少数据冲突。
5、索引
增加数据的检索速度。
6、复制
数据热备,增强系统的可用性。
7、集群
集群增加了系统的可靠性,可以使用多个服务器分担大并发时的系统压力。