在使用我的项目中的两个数据库后,我在Postgres和Mongo的经验。
Postgres(RDBMS)
如果您将来的应用程序具有需要大量联接的复杂架构,或者所有数据都具有关联性,或者如果我们撰写大量文章,则建议使用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限制已在较新版本和发行版中进行了优化,这些新版本在很大程度上克服了其先前的限制”。