在我的项目中使用了两个数据库之后,我对 Postgres 和 Mongo 的体验。
Postgres(关系型数据库管理系统)
如果您未来的应用程序有一个需要大量连接的复杂模式,或者所有数据都有关系,或者我们的写作量很大,建议使用 Postgres。Postgres 是开源的、速度更快、符合 ACID 并且在磁盘上使用更少的内存,并且在 JSON 存储方面也具有良好的性能,并且包括具有 3 级事务隔离的事务的完全可序列化性。
留在 Postgres 的最大优势是我们拥有两全其美的优势。我们可以将数据存储到具有约束、一致性和速度的 JSONB 中。另一方面,我们可以将所有 SQL 特性用于其他类型的数据。底层引擎非常稳定,可以很好地应对各种数据量。它还可以在您选择的硬件和操作系统上运行。Postgres 提供 NoSQL 功能以及完整的事务支持,存储带有字段数据约束的 JSON 文档。
Postgres 的一般约束
水平扩展 Postgres 要困难得多,但可行。
Postgres 无法完全实现快速读取操作。
没有 SQL 数据库
Mongo DB(有线老虎)
MongoDB 在“水平尺度”维度上可能会击败 Postgres。存储 JSON 是 Mongo 的优化目标。Mongo 以称为 BSONb 的二进制格式存储其数据,它(大致)只是 JSON 超集的二进制表示。MongoDB 完全按照设计的方式存储对象。根据 MongoDB 的说法,对于写入密集型应用程序,Mongo 表示,新引擎(Wired Tiger)为用户提供了高达 10 倍的写入性能提升(我应该试试这个),存储利用率降低 80%,有助于降低存储成本,实现硬件的更大利用率。
MongoDb 的一般约束
使用无模式存储引擎会导致隐式模式问题。这些模式不是由我们的存储引擎定义的,而是基于应用程序行为和期望定义的。
独立的 NoSQL 技术不符合 ACID 标准,因为它们牺牲了关键数据保护以支持非结构化应用程序的高吞吐量性能。在 NoSQL 数据库上应用 ACID 并不难,但它会在某种程度上使数据库变得缓慢和不灵活。“大多数 NoSQL 限制在较新的版本和发行版中进行了优化,在很大程度上克服了以前的限制”。