7 种现代数据库:用途、优点和缺点
关系 SQL 数据库
面向文档的数据库
内存数据库
具有宽列的数据库
列式数据库
搜索引擎
图形数据库
结论
市面上有数百种 SQL 和 NoSQL 数据库。有些很受欢迎,有些则被忽视。有些简单易用且文档齐全,有些则难以使用。有些是开源的,有些则是专有的。或许最重要的是,有些可扩展、经过优化且高度可用,而有些则难以扩展或维护。
一个自然而然的问题出现了:该选择哪个数据库?要回答这个问题,我们需要确定我们想用数据库实现什么目标。要形成一个想法,你需要回答以下问题:
- 我们需要对数据库进行分析访问吗?
- 我们需要实时书写或阅读吗?
- 我们想要保留多少个表/记录?
- 我们需要什么样的无障碍设施?
- 我们需要柱子吗?
我们能访问按列还是按行过滤的表?
在做决定时,您需要记住特定数据库的功能。每个数据库的具体细节可能有所不同,但总的来说,只有几种类型的数据库可以实现基本相同的目标。让我们更详细地了解一下。
关系 SQL 数据库
如果您曾经使用过数据库,那么很可能您是从这种类型的数据库开始的,因为它是最流行和最常见的。这种数据库允许您将数据存储在具有特定类型的特定列的关系表中。关系表非常适合规范化和合并。
优点:
- SQL支持
- ACID 事务(原子性、一致性、隔离性和持久性)
- 索引和分区支持
缺点:
- 对非结构化数据/复杂类型的支持较差
- 事件处理优化不佳
- 复杂/昂贵的扩展
示例: Oracle DB、MySQL、PostgreSQL。
面向文档的数据库
如果我们不想合并多个表来获取所需数据,可以考虑面向文档的数据库。它们允许以 JSON 格式存储记录。在这种格式下,我们可以为任意键创建一个复杂的值,并立即将整个数据结构包含在一条记录中。
优点:
- 该计划免费
- 没有必要总是写出每条记录中的所有字段
- 对复杂类型的良好支持
- 适用于OLTP
缺点:
- 交易支持不佳
- 分析支持薄弱
- 复杂/昂贵的扩展
例如: MongoDB。
内存数据库
此类数据库可以实时响应特定记录的选择和插入操作。它们大多将数据存储在 RAM 中,但在某些情况下,也会将数据存储在硬盘或固态硬盘上。这类数据库大多使用键值记录,因此值可以以面向文档的格式存储。但有些数据库也支持列存储,并允许对同一张表进行二级索引。使用 RAM 可以快速处理数据,但同时也会使其更加不稳定且成本更高。
优点:
- 快速写作
- 快速阅读
缺点:
- 高可靠性
- 昂贵的扩展
示例: Redis、Tarantool、Apache Ignite。
具有宽列的数据库
这些数据库将数据以键/值记录的形式存储在硬盘或固态硬盘上。这些解决方案旨在实现良好的扩展性,能够在分布式系统中管理数千台共享服务器上的 PB 级数据。它们代表着稳定的架构。该架构专为两种用例而设计:快速键访问和高可用性快速写入。
优点:
- 逐行快速输入
- 快速按键阅读
- 良好的可扩展性
- 高可用性
缺点:
- 键值格式»
- 没有分析支持
例如: Cassandra、HBase。
列式数据库
有时我们需要快速访问数据,不是通过特定的键,而是通过特定的列。在这种情况下,最好放弃逐行插入,转而使用批量记录。批量插入允许列式数据库准备数据,以便快速逐列读取。
优点:
- 逐列快速阅读
- 良好的分析支持
- 良好的可扩展性
缺点:
- 仅适用于批量插入
例如: Vertica、Clickhouse。
搜索引擎
如果我们想通过按任意值甚至按列中的任意单词进行筛选来访问数据,我们需要记住搜索引擎。这些数据库会索引列中的每个单词,并允许全文搜索。它们是存储和分析日志或大型文本值的理想选择。
优点:
- 通过任意单词快速访问
- 良好的可扩展性
缺点:
- 仅适用于批量插入
- 分析支持不足
例如:弹性。
图形数据库
在某些情况下,图数据结构是合适的。如果你的任务需要处理图,那么有一些特殊的数据库可以满足你的需求。
优点:
- 图数据结构
- 管理实体之间的关系
- 灵活的设计
缺点:
- 特殊查询语言
- 难以扩展
例如: Neo4j。
结论
几乎任何任务都可以用任何类型的数据库来执行。问题在于它的成本和优化程度。选择您熟悉的工具可以缩短产品上市时间。但维护和扩展设备也可能会花费大量资金,导致效率低下。请始终尝试按预期使用数据库。或许已经存在满足您需求的解决方案。
鏂囩珷鏉ユ簮锛�https://dev.to/ra1nbow1/7-types-of-modern-databases- Purpose-advantages-and-disadvantages-hmg