帝国时代之国家崛起_崛起于帝国时代

帝国时代之国家崛起_崛起于帝国时代01关系数据库帝国现在是公元2009年,关系帝国已经统治了我们30多年,实在是太久了。1970年,科德提出关系模型,1974年张伯伦和博伊斯制造出了SQL,帝国迅速建立起了统治。从北美到…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

01

关系数据库帝国

现在是公元2009年,关系帝国已经统治了我们30多年,实在是太久了。

1970年,科德提出关系模型,1974年张伯伦和博伊斯制造出了SQL ,帝国迅速建立起了统治。

从北美到欧洲, 从欧洲到亚洲,  无数程序员臣服在他的脚下。

帝国给我们提供了良好的福利:

简单而强大的关系模型

灵活的SQL

还有我们非常喜欢的事务和ACID,把我们从底层并发的细节中解放出来。

使用这些福利,程序员们开发了无数的系统,每个系统的核心都是关系数据库。

时代在不断地变迁,编程语言的城头不断变换大王旗,但是存储在表格中的数据,一直岿然不动。

数据永远是一个企业最宝贵的资产。

但是帝国也给我们套上了沉重的枷锁:模式和规范化。

帝国规定:必须事先定义好模式(表结构)才能保存数据!

所有的数据至少得满足第一范式,甚至第二范式、第三范式、BCNF范式!

如果实现不了,就会被投进监狱,对于某些部落来讲,即使是做一个简单的冗余字段,都会被别人耻笑。

帝国宣称的SQL移植性也欺骗了我们,SQL虽然被标准化,但是每个厂商DB2, Oracle, SQL Server都有自己的方言!

尤其是在计算日期和字符串操作。还有存储过程,几乎每个厂商都会自己搞一套,根本无法移植!

02

危机

上世纪90年代,面向对象技术的流行给帝国带来了一次严重的危机:

对象-关系的阻抗不匹配。

“对象(Object)”有继承,子类,父类,关联,聚合,多态;

而关系数据库就是简单的表格!

他们是如此的不同,简直是水火不容,矛盾不可调和。

帝国时代之国家崛起_崛起于帝国时代

那个时候,帝国的东边出现了一个叫面向对象数据库OODB的部落, 号称可以把Java对象,C#对象,Ruby对象等等都一股脑地、直接存储到OODB当中去。

把对象直接保存到数据库?这实在是一个美妙的特性。

但是OODB实在是不争气,很快偃旗息鼓,在几个小领地苟延残喘。

2001年,有个叫Gavin King的27岁小伙子,开发了一个叫做Hibernate 的东西,在对象和关系之间搭了一座桥,叫O/R Mapping。

帝国时代之国家崛起_崛起于帝国时代

这一下子赢得了Java 程序员的芳心。

Hibernate再接再励,又推出了NHibernate, 打入了.NET的领地。

随着iBatis, JPA等更多O/R Mapping工具和接口的出现,关系数据库帝国成功地度过了这一次的危机。

后来有个好事者Martin Fowler,居然写了一本书《企业应用架构模式》, 在里边一本正经地把各种O/R Mapping的模式都总结了一遍:“单表继承”,“类表继承”,“活动记录”。。。。。。

帝国时代之国家崛起_崛起于帝国时代

这一番骚操作又替关系数据库帝国续命20年不止。

03

新希望

没过多久,互联网大潮来了,历史再次给了我们一个机会。

互联网的用户数如此之多,并发数如此之高, 让我们始料未及。

数据量是如此巨大,数据种类如此丰富,更让我们目瞪口呆。

文字、图片、链接、日志、社交关系,大量的数据蜂拥而至,单台机器上的数据库很快就撑不住了。

帝国时代之国家崛起_崛起于帝国时代

帝国先是拼命扩容,恨不得把一台机器弄成1024G的内存,1024T的硬盘,还美名其曰垂直扩展。

但是机器功能越强,价格就越贵,臣民们的税负越来越重,很快就受不了了。

没办法,帝国只好做水平扩展,把数据分布在多台机器上,这需要精心的规划,还需要程序员和应用程序精确地记住每一份数据放在哪里。

更要命的是,这种办法丢掉了帝国引以为傲的福利:事务和一致性

帝国时代之国家崛起_崛起于帝国时代

04

反抗

我决定反抗这个庞大的帝国,  我偷偷地带领着一帮志同道合的兄弟离开了,我们要新建一块清新自由的领地。 

我们仔细地研究了关系帝国的缺点,派出了几只小分队分头出击。

誓师出征之时,我们对这四只小分队都提出了同样的要求:支持分布式和集群!!!

第一支小分队由redis担任队长,memcached 担任副手,他们很快便取得了成功,因为他们打击到了关系帝国最大的缺点:高并发下,数据库IO非常缓慢。

redis和memcached 做了一个大胆的决定,抛弃了硬盘,选择了比硬盘快几万倍的内存, 把数据以key-value的方式放入其中。

超快的速度让程序员们非常喜欢,他们不仅把session,配置信息,购物车的数据放入其中。

后来干脆把他俩当成了缓存来使用。

帝国时代之国家崛起_崛起于帝国时代

第二支小分队由Mongodb带领,CouchDB辅佐,他们敏锐地瞄准了用关系数据表保存起来很别扭的数据。

帝国时代之国家崛起_崛起于帝国时代

帝国时代之国家崛起_崛起于帝国时代

订单到订单项和支付, 订单项到产品是典型的一对多关系,意味着数据是树状结构,那为什么不直接用一个JSON文档来表示呢?

{

    “orderId”:”1″,

    “userId”:”123″,

    “lineItems”:[

        {

            “productId”:”1356″,

            “qty”:”1″

        },

        {

            “productId”:”2375″,

            “qty”:”2″

        }

    ],

    “shippingAddress”:{

        “type”:”xxx”,

        “address”:”xxx”

    },

    “payment”:{

        “type”:”alipay”,

        “time”:”xxxx”

    }

}

MongoDB还和JavaScript,Node.js勾勾搭搭,把浏览器发来的JSON数据直接存储到MongoDB中,轻松又方便。

第三支小分队的头领是Neo4j, 这家伙非常擅长图结构,对于社交网络、推荐系统的数据,用它来表示非常合适。

帝国时代之国家崛起_崛起于帝国时代

第四支小分队由HBase带领, Cassandra殿后, 他们都是列式数据库,百亿行 * 百万列的数据对于他俩来说稀松平常。

帝国时代之国家崛起_崛起于帝国时代

帝国时代之国家崛起_崛起于帝国时代

这个小分队也获得了巨大的成功,移动互联网所产生的海量数据,如日志、聊天记录,监控数据,物联网的数据,结构化并不强,非常适合用HBase这种列式数据库来存放。

05

新的帝国

几年以后,四支小分队顺利班师,都带回了大批的程序员拥趸,因为适合的才是最好的。

一个新的、可以和关系数据库抗衡的帝国悄然成型。

经过一番激烈讨论,我们给帝国起了一个响亮的名称:NoSQL

意思是不要SQL!

但是,加入NoSQL帝国的程序员发现我们也有非常明显的弱点:

缺乏模式(如表结构)、数据完整性约束很弱、对事务的支持很弱,甚至干脆没有, 这引起了程序员的强烈不满和抗议。

有不少人短暂尝鲜NoSQL以后,又抛弃了我们,重回SQL的怀抱。

我们决定和关系数据库帝国议和,告诉他们说NoSQL的意思是Not Only SQL, 我们两大帝国应该取长补短,和平共处。

经历了几年战火的关系数据帝国也看清楚了IT趋势,欣然接受。

从此,数据库进入了混合存储的时代!

帝国时代之国家崛起_崛起于帝国时代

码农翻身3年精华文章

漫画:康熙学不会二进制

漫画:程序员必须要小心的七个潜规则

漫画:兄弟,今晚又得熬个通宵了!

架构师劝退指南

程序员的宿命

宇宙第一IDE到底是谁?

HTTP Server :一个差生的逆袭

如何降低程序员的工资?

程序员,你得选准跑路的时间!

Javascript: 一个屌丝的逆袭

我是一个线程

TCP/IP之大明邮差

一个故事讲完Https

CPU 阿甘

帝国时代之国家崛起_崛起于帝国时代

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/190057.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 卸载的软件怎么恢复_mac怎么强制卸载软件

    卸载的软件怎么恢复_mac怎么强制卸载软件http://hi.hiing.net/2011/06/use-homebrew-package-management.htmlMacPorts和Homebrew都是MacOSX上的软件包管理工具(via Wikipedia),且它们之间是不兼容的.个中好处就不介绍了,这里要说的是删除MacPorts并安装Homebrew.准备条件:Mac是自带Ruby程式的,如

  • tensorflow矩阵运算_二维矩阵求逆

    tensorflow矩阵运算_二维矩阵求逆线性回归算法能表示为矩阵计算,Ax=b。这里要解决的是用矩阵x来求解系数。1.导入必要的编程库,初始化计算图,并生成数据。>>>importmatplotlib.pyplotasplt>>>importnumpyasnp>>>importtensorflowastf>>>sess=tf.Session…

  • 基于SSH的实验室设备管理系统mysql[通俗易懂]

    基于SSH的实验室设备管理系统mysql[通俗易懂]### 环境:JSP+SHH框架+MySQL数据库+jdk+tomcat每个功能模块的具体功能如下所述:实验室教师端(管理员端)通知管理模块该模块是实验管理员发布通知公告的地方,具体包括新增通知公告、删除通知公告。预约和借用记录管理模块这是两个模块,而其设计思想大致相同,借用记录管理模块主要是对借用的设备仪器进行记录,其包括借用人、借用时间、归还时间和审核。借用设备需要管理员的审核…

    2022年10月13日
  • 有什么用_pattern和way的区别

    有什么用_pattern和way的区别开始:在利用servlet或filter进行url请求的匹配时,很关键的一点是匹配规则,但是servlet容器中的匹配规则既不是简单的通配也不是正则表达式而是有自己的规则比较容易混淆绝对路径和相对路径当浏览器发起一个url请求后,该请求发送到servlet容器的时候,容器会先将请求的url减去当前应用上下文的路径作

    2022年10月29日
  • strut2 自己定义文件上传错误信息

    strut2 自己定义文件上传错误信息

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号