了解了NoSQL提供的一些优点(可伸缩性,可用性等),我仍然不清楚网站为什么要使用非关系数据库.我可以得到一些帮助,最好是一个例子吗?
更好的性能
NoSQL数据库有时会有更好的性能,虽然这取决于具体情况并且存在争议.
适应性
您可以在不停机的情况下添加和删除"列".在大多数SQL服务器中,这需要很长时间并占用负载.
应用设计
期望将数据存储与逻辑分离.如果您在SQL查询中加入并选择内容,则将业务逻辑与存储混合在一起.
NoSQL数据库可以解决几个问题,主要是:
(嗡嗡声)BigData =>认为TB,PB等.
使用分布式系统 /数据集=>假设您有42种产品,因此其中13种将存在芝加哥数据中心,21种位于纽约,另外21种位于日本某处,但是一旦您查询了所有42种产品,您就不需要知道他们所在的位置:NoSQL DB会.这也允许更多的脑力(服务器)来解决硬计算问题[似乎不适合你的用例,但这是一个有趣的事情要注意]
分区 =>让您的数据库易于分发,除了日本的酷8产品之外,还允许轻松的数据复制,因此这些42个产品将被复制3倍,这意味着您将拥有3个数据库每个产品的副本.因此,如果出现故障,没问题=>这里有可用的副本.这就是NoSQL数据库与RDBMS实际相比的地方.当然,你可以对Oracle/MySQL/PostgreSQL等进行分片,分区和集群.但是这是一个更复杂的过程,对于你雇用的大多数人来说通常是一个维护问题.
但是你的问题:
为什么网站要使用非关系数据库
当我和大多数人一起工作/与NoSQL
他们聊天,选择他们的"网站"时,遗憾的是不是出于上述原因,而是因为这样做太酷了.事实上,由于这个原因,许多项目失败/极度困难.
如果大多数的NoSQL大师带着面具了,他们会同意,大部分的问题(或人打电话给他们websites
),开发人员解决一天算一天,能和相当与一个SQL的解决方案,如PostgreSQL的,MySQL等解决..在它上面有一些很酷的Redis缓存层.只有一小部分问题真的会从NoSQL中受益.
我个人喜欢Riak
,因为我坚信NoSQL,容错DB应该具有极强,灵活和自然分布的基础=>如Erlang OTP
.另外,我是简单的粉丝.但同样,考虑到这个问题,我会选择最好的方法,而且大部分时间我都需要这种一致性(特别是如果我们谈论金钱 /金融世界/关键任务等等).
不使用SQL数据库的主要原因是可伸缩性.事务保证和关系模型几乎不可能在多台机器上有用地扩展数据库,特别是考虑到现代Web应用程序生成的写入繁重的工作负载.
除了大量的分区和分片之外,像Facebook这样的应用程序无法在简单的SQL数据库上运行,这也需要对应用程序逻辑进行重大调整.这就是Facebook开发Cassandra的原因.
NoSQL基本上意味着你没有一些SQL特有的功能,如立即一致性或简单连接,以换取能够使用更好地扩展的数据库.
相反,如果您的网站永远不会有十几个并发用户(绝大多数网站都是如此),那么使用NoSQL毫无意义.
我们需要了解当前应用程序中的问题是什么?
交易
数据量
数据结构
NoSQL解决了原子性或一致性的可伸缩性和可用性问题.
基本驱动我们到CAP定理.Eric Brewer还指出,在共享数据系统的三个属性中 - 网络分区的一致性,可用性和容忍度 - 在任何给定的时刻都只能实现两个.(CAP定理)
NOSQL方法
无架构数据表示:
他们中的大多数提供无模式数据表示并允许存储半结构化数据.
可以随着时间的推移继续发展 - 包括添加新字段甚至嵌套数据,例如,在JSON表示的情况下.
开发时间:
没有复杂的SQL查询.
没有JOIN声明.
速度:
非常高速的交付和大多数内置的实体级缓存
提前规划可扩展性:
避免返工