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

帝国时代之国家崛起_崛起于帝国时代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 阿甘

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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • RabbitMQ原理分析

    RabbitMQ原理分析RabbitMQ 简介基于 AMQP 协议实现 主要作用是解耦 冗余 扩展性 增大消息入队和处理的频率变得很容易 平滑峰值 可恢复性 送达保证 ACK 机制消费者消费消息后必须返回相应的 ACK 顺序保证等 文章当中使用的 RabbitMQ 的版本是 RabbitMQ3 6 6 关键概念 Exchange 交换机启动 RabbitMQ 相关的服务 会默认创建一个不可以删除的 Excha

    2025年6月8日
    4
  • Chango的数学Shader世界(二十三)漩涡Shader-复数分析(深渊)「建议收藏」

    Chango的数学Shader世界(二十三)漩涡Shader-复数分析(深渊)「建议收藏」目的:我的2D游戏,需要一个有特定感觉的“漩涡shader”。上一节里,我简单实现了这个:但转动有些乏味,它的转动动作是类似这样的:(网图)接下来想让它动起来更加深邃,恐怖。本文先搞了2种效果:(图3,扩散瞳孔)(图4,深渊)抽象分析:前篇的Shader效果之所以看起来乏味,是因为在旋转的时候,像素点的极长(以方块中心为原点极坐标系)并没有改变,只是越接近中心,点的旋转量越小而已。(旋转前后点都在同心圆上)如果我想要深渊有“吃人”的感觉,那么内部的

    2022年6月19日
    38
  • 使用.NET统计文件夹中文件总数

    软件下载:http://hovertree.com/h/bjaf/hwqtjwjs.htm截图:使用方法:点击按钮,选择文件夹,就可以显示文件夹中包含的文件总数。这个项目包含在HoverTree解

    2021年12月22日
    60
  • pycharm远程连接服务器及同步

    pycharm远程连接服务器及同步文章目录 pycharm 远程连接服务器及同步 ref 概述实际步骤其他设置注意推荐使用方式 nohup 命令 pycharm 远程连接服务器及同步 refpycharm 连接 ssh 笔记 Pycharm 运行服务器环境设置 python 开发环境的配置 Linux pycharm pyenv 概述用到服务器的地方大概有 建立 ssh 终端连接 一个服务器可以新建一个 sshsession 建立 SFTP 连接同步文件 一个服务器可以新建一个 deployment 建立 ssh 远程环境 一个远程环境可以新建一个 sshin

    2025年9月27日
    5
  • cookie的domain属性

    cookie的domain属性欢迎大家光临我的个人博客,详戳https://545longgege.top/最近在改一个bug单时,有个问题涉及到了cookie的domain属性,大致场景是由于不同的服务页面出现了同名的cookie但是domain域不同,导致出现了不可思议的bug。于是查询与cookie的domain属性相关的资料并记录之。1、什么是Cookie?Cookie是由W3C组织提出,最…

    2022年7月11日
    20
  • ip签名图-论坛签名图片显示ip地址操作系统浏览器等信息,本机ip

    ip签名图-论坛签名图片显示ip地址操作系统浏览器等信息,本机ipip签名图-论坛签名图片显示ip地址浏操作系统浏览器等信息,另:推荐个只显示本机外网ip地址本机ip

    2022年7月3日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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