甲骨文
Oracle 不是最流行的数据库,但却是最著名的数据库。虽然可以说是最受欢迎的。看怎么算。如果你只看公司的数量,那么 MySQL 是最受欢迎的数据库:它非常好而且完全免费 :)
但也可以换个角度考虑。如果有一家拥有一百万客户的公司使用 Oracle,有 5 家公司拥有一百个客户使用 MySQL,那么 Oracle 有一百万客户而 MySQL 只有 500 人。
总的来说,如果你让有钱的大公司看看他们选择了哪种 DBMS,那么世界上大约三分之一的公司都在使用 Oracle。像这样的东西。
作为一名程序员,您将来更有可能在 Oracle 上工作,而不是在 MySQL 上工作。Internet 上有一个很棒的视频演示了过去 20 年来 DBMS 的受欢迎程度发生了怎样的变化。
MySQL
在所有 DBMS 中第二流行的是 MySQL。并且是所有免费DBMS中流行度第一的。现在你明白我们为什么要从她的例子中学习 SQL 了吧。炒作归炒作,企业在基础设施的选择上相当保守。
原则上,我们已经讲过MySQL。一旦他们被Sun收购,然后被Oracle收购。嗯,很难称之为善良的公司。
正是他们,在收购了Sun之后,不断地试图让Java付出代价。
是的,在甲骨文收购它们之前,Sun 拥有 Java 和 MySQL。
这个事实和 Oracle 的声誉让 MySQL 开发人员有点害怕,他们决定 fork MySQL 项目并将其命名为 MariaDB。
MariaDB实际上是MySQL 的克隆,具有一些实现怪癖,可以让您绕过专利和许可的细微差别。
不过,甲骨文也不是傻子。为了防止客户和开发人员泄露给 MariaDB,Oracle 继续资助 MySQL 的开发和开发,MySQL 继续免费。
坐在两把椅子上,为企业客户发布了付费的MySQL Enterprise ,它与MySQL Community Edition没有区别,但其许可证更适合企业。
数据库
另一个有趣的 DBMS 是 PostgreSQL(发音为“postgres cue”)。
这是近年来迅速普及的另一种免费 DBMS。虽然离MySQL还差得很远。
PostgreSQL 主要专注于分布式工作。它的优势是:
- 高性能可靠的事务和复制机制
- 内置编程语言的可扩展系统:PL SQL、PL JS、PL Python……
- 表继承
- 索引几何(特别是地理)对象的能力
- 内置对 JSON 格式的半结构化数据的支持,并能够对其进行索引
- 可扩展性(创建新数据类型、索引类型、编程语言、扩展模块、连接任何外部数据源的能力)
知道为什么这么叫吗?事情是这样的……
大约 50 年前,即 70 年代初,伯克利大学开始开发自己的关系型 DBMS,并将其命名为Ingres。
在 80 年代初期,Michael Stonebreaker 教授离开了该项目并决定编写自己的 DBMS 与 blackjack 和妓女。他和他的学生开始编写他们自己的 DBMS,他们将其简称为Post Ingres,后来简称为Postgres。
由于 Postgres 这个名字对任何人都没有任何意义,因此决定为其添加 SQL 后缀。PostgreSQL 就这样横空出世,立马丢了双S,开始写成PostgreSQL。但是你说名字,你需要像 PostgresQL 一样读它。
无SQL
如果您对数据库感兴趣,那么您肯定听说过NoSQL 数据库。我赶紧打扰你:NoSQL 纯粹是一个营销名称,而 SQL 就在那里。他只是被截断了。
它是什么样子的?想象一个用 HTML、CSS 和 JavaScript 编写的漂亮网页……在 1995 年的浏览器中打开。它依靠 10% 的 CSS 工作,完全不支持 JavaScript。这个新的精简标准称为…… NoHtml。
例如,NoSQL 可能不支持表之间的 JOIN,然后您必须在程序中的 Java 代码级别模拟它,或者将相关表的所有数据存储在一个巨大的表中。
如果在 NoHtml 的情况下我们似乎回滚到 20 年前,那么在 NoSQL 的情况下,回滚发生在大约 40 年前。
以Facebook用来存储数十亿用户数据的Cassandra NoSQL 数据库为例。实际上,他们开发了它,然后将其发布为一个开源项目。
让我们从最有趣的开始——所有的 DBMS 代码都是用 Java 编写的。C++ 代码可能会运行得更快,但会有更多错误。而且Java代码更容易维护和开发。
向 Casandra DBMS 发出请求的一般格式看起来非常熟悉:
SELECT columns
FROM table
WHERE condition
GROUP BY columns
ORDER BY sorting
LIMIT quantity
如您所见,SQL 就在那里。你知道这里缺少什么吗?加入!您只能从一个表中选择数据:)
这是官方文档中的引述:
您不能在 Cassandra 中执行联接。如果您已经设计了一个数据模型并发现您需要类似连接的东西,您将不得不在客户端完成工作,或者创建一个非规范化的第二个表来代表您的连接结果。
GO TO FULL VERSION