让数据库研究再次伟大!!!
目录
-
1.序言
-
2.比MySQL有更多的可能性
-
3.SQL 与 NoSQL
-
4.明智地选择
-
5.最酷的数据库范例
-
6.最后的考虑
TL:DR 在这篇文章中,我将分享我在数据库学习课程中学到的知识,了解到目前为止让我着迷的数据库主题。
(更多优质教程:java567.com,搜"mysql")
1.序言
在 2022 年底,当主题是数据库时,我决定把事情弄清楚,因为这总是一种痛苦,作为后端开发人员,很高兴讨厌复杂的数据库查询。考虑到这一点,我挑战自己从头开始,为了好玩而了解这个未被充分探索的世界。
2.比MySQL有很多可能性
我没有完成大学学业,在那里时我没有看到任何关于数据库的东西,所以我没有任何理论背景,在这 4 年的企业级编码中,我的重点完全在于:Clean Code, SOLID、 设计模式 和其他与代码相关的东西,而我唯一的数据库知识是关于 SQL/MySQL 和 缓存/ Redis的。
在前五分钟谷歌搜索东西,在 Twitter 上询问内容推荐,我刚刚登陆了这个名为 “7 个数据库范例”的视频 ,这让我大吃一惊。就像,除了键值和关系之外?瓦特
以下是范例列表和各自的具体实现:
-
键值: Redis
-
宽栏: Apache Cassandra、 ScyllaDB 和 DynamoDB
-
文档: MongoDB
-
图: Neo4J
-
关系型: MySQL、 MariaDB、 PostgreSQL
-
搜索引擎: 弹性搜索
-
多模型: FaunaDB、 MongoDB、 Redis 等。
3. SQL 与 NoSQL
因为我们正在尝试迎接一个新的挑战,我的主要重点是脱离我觉得舒服的一切,研究我以前没见过的东西,它包括我在 NodeJS 世界中经常听到的 这个 词: 诺斯克。
我知道 MySQL、OracleDB、SQLServer 使用 SQL(结构化查询语言),但我从未试图理解为什么会有这样的“反向 SQL”或“反 SQL”,所以我首先深入了解它们的区别:
// Structured
table: users
id: int
name: string
table: user_addresses
id: int
user_id: int references id in users
address: string
table: users
--------------------
| id | name |
| 1 | danielhe4rt |
--------------------
table: user_addresses
---------------------------------------------------------
| id | user_id | address |
| 1 | 1 | Flowers St. 123, São Paulo/SP - Brazil |
---------------------------------------------------------
SQL 由以下因素驱动:表、行和列
// database-prod.json
{
"users": [
"huid2d12bdh12b": {
"id": 1,
"name": "danielhe4rt",
"addresses": [
"jio32fsdyhis": {
"address": "Flowers St. 123, São Paulo/SP - Brazil"
}
]
}
]
}
NoSQL 由以下因素驱动:文档、集合和字段。
引起我注意的是 NoSQL 如何有大量很酷的特性需要研究,因为我们有键值、文档、宽列作为研究选项。
我选择 Wide Column Database 来继续深入研究,因为我发现有两个很酷的主题,即我想研究的 复制因子 和 一致性级别 ,但首先我们需要谈谈 CAP 定理。
4.明智地选择
基于数据库的CAP定理
一些名叫 Eric Brewer 的坏蛋认为分布式数据存储只能提供这 3 种保证中的 2 种:一致性、可用性和分区容错性。好吧,如果你足够合理,你可以拥有所有这些,但这是另一篇文章的主题。
好的,但是这些项目的含义是什么?比如,我为什么要关心这个?定理是不是一些数学上枯燥的东西?不,请在那个 PLZ 上跟我来!!!正如我所说,我们需要理解这些支柱:
-
可用性:您在不同的节点中拥有数据,如果其中几个节点发生故障,您应该仍然可以使用数据。
-
一致性:你更新了一些数据,但不能保证这是最近的写入,因为复制操作没有在其他数据中心完成,但它可以使用 Consistency Level进行配置。
-
Partition Tolerance:如果副本/节点之间的通信出现任何故障,我可以继续操作吗?
在这一点上,我们已经有很多概念需要理解并继续在我们的旅程中磨砺,但现在我们将看到最后一步以及我想写这篇文章的原因:宽列数据库范式!