从MongoDB引到NOSQL


要讲MongoDB之前,首先要提到一个概念NOSQL(NoSQL = Not Only SQL )

很大一部分数据是由关系型数据库管理系统(RDMBSs)来处理的,关系模型是结构化储存的主力军,宛如帝王般的存在

而NOSQL就是那个断指的刺客,拿剑指向帝王

它提倡使用非关系的数据储存

ACID原则(关系型数据库的金科玉律)

数据库中的事务(transaction)和现实生活中的交易类似,它就具有如下的四个特性

1.A(Atomicity)原子性

要么全部做完,要么大家都别做了(如果一个操作失败,那么整个事务都要回滚)

2.C(Consistency)一致性

数据库需要一直处于一致的状态,事物的运行不会改变数据库的一致性约束

eg:如果有个A+B=10的约束,如果有一个事务改变了A那么就必须再改变B,使得依然满足A=B=10的这个条件。

3.I(Isolation)独立性

独立性是指并发的事务之间不会互相影响,在事务结束之前,数据是不会被影响的。

4.D(Durability)持久性

事务一旦改变了数据,那他就会永久的停留在数据库里面,即使发生宕机数据也不会发生丢失。

为什么要去使用NOSQL?

可以部分参考王垠的观点,《关系模型的实质》https://www.yinwang.org/blog-cn/2014/04/24/relational ,对数据进行挖掘,那么关系型的SQL就不适合处理这些庞大的用户数据。

BASE

BASE:Basically Available, Soft-state, Eventually Consistent。 由 Eric Brewer 定义。

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。

BASE是NoSQL数据库通常对可用性及一致性的弱要求原则:

  • Basically Availble --基本可用
  • Soft-state --软状态/柔性事务。 "Soft state" 可以理解为"无连接"的, 而 "Hard state" 是"面向连接"的
  • Eventual Consistency --最终一致性 最终一致性, 也是是 ACID 的最终目的。

MongoDB

既然没有关系模型,那要怎么样在数据库里面建立索引呢

以MongoDB为例,文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段建立索引,实现关系数据库的某些功能。

参考资料
https://www.mongodb.org.cn/tutorial/2.html

最新文章

  1. VIM使用(一) VIM插件管理利器-vundle
  2. chrome远程调试真机上的app - 只显示空白页面
  3. IOS编程 图片缓存模块设计
  4. Jsp-Servlet 那一大堆事儿--1
  5. 你猜……你再猜
  6. ||和 && 符号的赋值运用(转)
  7. 如何搭建MVC3与配置models层
  8. python--代码统计(进阶版)
  9. Laravel 服务容器,IoC,DI
  10. Mysql 操作技巧
  11. CentOS Linux下VNC Server远程桌面配置详解
  12. Minimum Cost POJ - 2516(模板题。。没啥好说的。。)
  13. VS2013快速安装教程
  14. SP14932 【LCA - Lowest Common Ancestor】
  15. mysql处理时间戳
  16. ubuntu lvm模式进行扩容
  17. 慎用 new、delete
  18. 用JavaScript中lodash编写双色球
  19. HTML基本代码教学片,认识HTML
  20. scala学习手记36 - 容器基础

热门文章

  1. Beginner’s Tutorial: 3D Line and Border Effects in XAML
  2. 资源文件加载(Pack URI 方案)
  3. android studio中使用9-patch报错mergeDebugResource及Duplicate resources错误处理
  4. 【全面解禁!真正的Expression Blend实战开发技巧】第九章 FluidMoveBehavior完全解析之二平滑运动的滚动条
  5. 小米手机销量暴跌36% 雷军做错了什么?(人的需求是复杂的,而不是仅仅是一个性价比;要做体验价格比,而不是配置价格比)good
  6. Anbox —— 在 Linux 系统中运行 Android 应用
  7. .NET错误提示之:无法更新EntitySet“TableName”因为它有一个DefiningQuery
  8. MISP版本嵌入式QT编译时出现mips-linux-gcc command not found
  9. c#编写的基于Socket的异步通信系统封装DLL--SanNiuSignal.DLL
  10. 【spring boot】application.properties官方完整文档