首先,我想说你非常正确地指出了NoSql与关系型数据库的区别,因此很难进行比较。话虽如此,两者之间有许多重大区别可以进行比较。
扩展性
尽管您可以对MySql数据库进行分片,但是当RDMS在多台机器上时,强制执行ACID属性会非常具有挑战性,存在
问题。NoSql解决方案(如Cassandra)以其无需处理问题即可实现增长的能力而闻名,在某些情况下,可以管理
400个节点的集群而不会出现问题。增加Cassandra数据库不仅容易,而且性能不会受到影响。
Schema(less) 模型。
NoSQL 数据库系统是为了管理不遵循固定模式的大量数据而开发的。这意味着例如,如果您希望向Cassandra中的现有列族添加新列,则无需返回并修改列族,因此不需要执行此操作:
ALTER TABLE table_name ALTER COLUMN column_name datatype;
我们可以随着需求增加新的列,最终可能会得到以下“表格”:
key | follower1 | follower2 | follower2
-------------+------------+-------------+-----------
lyubent | joeb | chuckn | gordonf
chuckn | joeb | gordonf
gordonf | chuckn
joeb | chuckn | lyubent | joeb
这使得数据模型具有灵活性和易于扩展性,但在此过程中数据变得不太结构化。
速度
NoSql数据库针对
高写入速度进行了优化,而RDBMs则旨在实现高读取速度。但即使考虑到这一点,NoSql解决方案在读取方面仍然往往
胜过RDBMs系统。这是因为NoSql数据库不实现许多减慢关系模型中读取/写入/更新操作的功能,例如ACID属性和事务。
何时应使用它?
- 你的应用程序/网站需要快速增长,但你想从小开始。
- 你更关心写入数据而不是读回数据。(大量推文被发布但并非所有人都阅读)
- 系统的可用性比数据100%更新更重要。(因此如果是银行,您不需要NoSql,但如果您是需要100%运行时间的网站,则可能是一个不错的选择)
- 如果所写入的数据需要100%成功,但最终的一致性不是问题。
仅供视觉参考,这对我在理解不同的SQL解决方案在数据库世界中的位置以及每个解决方案的目的方面帮助很大。