NoSQL数据库对比¶
Cassandra | MongoDB | |
---|---|---|
特点 | ||
可用性 | Cassandra具有多个主节点、节点分区和key复制来提供高可用性。 | MongoDB使用单primary节点复制来提供高数据可用性。 它将数据复制到副本集中。只有一个primary节点接收写入,其他节点只是从primary节点复制数据。primary节点会产生单点故障。 |
可扩展性 | Cassandra使用称为一致性哈希的分布式哈希算法来确定哪个节点负责特定数据值。它通过简单地增加更多节点来扩展,几乎没有上限。 | MongoDB使用分片key来识别数据值的去向。数据库管理员可以定义分片key来对数据进行分区。 |
性能 | Cassandra通过可调节的一致性模型和行级原子性实现并发。对某行数据同一时间只能由一个用户可以操作。 | |
分页查询支持 | Cassandra支持基于令牌的分页查询,适用于大规模数据集的高效遍历。但它不支持传统的基于偏移量的分页(例如“第n页”这样的查询)。 | MongoDB支持基于偏移量的分页,也支持基于游标的分页。但在大数据集上可能会导致性能问题,因为MongoDB需要遍历跳过的文档。适用于用户界面和小到中等规模的数据集。 |
数据规模 | Cassandra被设计为支持极大规模的数据存储。它可以处理PB级(千万亿字节)的数据,适合大数据应用。 | MongoDB同样可以处理大规模的数据存储,支持TB到PB级的数据量。当数据量达到极大规模时,MongoDB的性能可能会受到一定影响,尤其是在分片和索引方面。 |
运维难度 | Cassandra的安装和配置相对复杂,特别是在大规模和分布式的环境中,需要进行细致的性能调优和配置,以适应特定的工作负载和数据模式。日常管理任务包括节点维护、数据备份和恢复、性能监控等,这些任务在大规模集群中可能变得复杂, 需要有一定的专业知识和经验来有效管理Cassandra集群和实施故障恢复。 | MongoDB的安装和初步配置简单,它提供了更直观的界面和工具,有利于快速部署和管理。 日常维护工作相对简单,特别是对于中小规模的部署。MongoDB提供了比较完善的监控和故障恢复机制,对运维人员的要求相对较低。 |
成本 | 由于高性能要求,可能需要投资更高端的硬件。 | 通常对硬件的要求较低,尤其是在中小规模部署时。 |
公有云支持 | AWS:Amazon Keyspaces (for Apache Cassandra) Azure:Managed Instance for Apache Cassandra GCP:DataStax Astra DB |
AWS: Amazon DocumentDB (with MongoDB campatibility) Azure:MongoDB Atlas GCP:MongoDB Atlas |
云原生支持度 | Example on K8S official site K8ssandra DataStax Operator |
MongoDB Community Kubernetes Operator MongoDB Enterprise Operator for Kubernetes |
适用场景 | 大数据并需要动态扩展节点 需要高可用性和容错性的应用 对读写延迟有高要求 |
需要灵活的数据模型和快速迭代的应用 对象和JSON数据的存储和查询,如移动应用、Web应用 |
参考¶
- https://aws.amazon.com/compare/the-difference-between-cassandra-and-mongodb/
- https://www.analyticsvidhya.com/blog/2021/09/apache-cassandra-data-modelcql-schema-and-database-design/
- https://kubernetes.io/docs/tutorials/stateful-application/cassandra/