首先,我想说的是,您说NoSql 与关系数据库不同,因此很难进行比较,这是非常正确的。话虽如此,两者之间有许多可以比较的大区别。
扩展
虽然您可以对 MySql 数据库进行分片,但是当 RDMS 在多台机器上时,分片和强制执行 ACID 属性会非常具有挑战性,但像 Cassandra 这样的 NoSql 解决方案以其在某些情况下管理 400 个节点的能力而著称。集群没有问题。Cassandra 数据库不仅易于扩展,而且性能也不会受到影响。
模式(更少)模型。
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 数据库针对高写入速度进行了优化,而 RDBM 旨在实现高读取速度。但即使考虑到这一点,NoSql 解决方案在读取方面仍然倾向于优于 RDBM系统。这是因为 NoSql 数据库没有实现许多减慢关系模型中读/写/更新操作的功能,例如 ACID 属性和事务。
什么时候应该使用它?
- 您的应用程序/网站需要快速增长,但您希望从小处着手。
- 你更关心写入数据而不是读回数据。(发布了很多推文,但并非所有推文都被阅读)
- 系统的可用性比 100% 更新的数据更重要。(因此,如果您是银行,则不需要 NoSql,但如果您是需要 100% 正常运行时间的网站,它可能是一个不错的选择)
- 如果正在写入的数据需要 100% 的时间成功,但最终的一致性不是问题。
只是为了直观的说明,这有助于我理解不同的 sql 解决方案在哪里适合数据库世界,以及每个解决方案如何适合一个目的。