NoSQL泛指非关系型数据库,诸如Cassandra、MongoDB、Neo4J和Riak等。它们主张使用无模式(schemaless)的数据,可以运行在集群环境中。
数据分布的两种方式:
1.将不同的数据分片放在多个服务器中,每一个数据子集(subset of data)都专门由一台服务器负责。
2.将数据复制到多个服务器上,每份数据都能在多个节点中找到。
数据库系统中可以选用其中一咱技术,也可以两种都用。
复制技术又有两种形式:
“主从复制”:将其中一个节点当作权威数据源,并负责写入操作;其他从节点都要和主节点保持同步,它们可以负责读取操作。
“对等复制”:任何节点均可写入,节点间相互协调以同步其数据。
“主从复制”减少了更新数据库的冲突几率,但它们会让主节点成为写入操作的瓶颈,而“对等复制”则避免了这一点。
在分布式系统中,如果某些节点收到了更新数据,而另外一些节点尚未收到,那么这种情况就视为“读写冲突”。若写入操作已经传播至所有节点,则此刻数据就具备“最终一致性”。
想取得较好的“一致性",就要用许多节点来执行数据操作,而这又会增大延迟,所以说,经常需要在”一致性“与延迟之间权衡。
在采用”复制“技术的分布式模型中执行数据操作时,无需联系所有副本,只要为足够多的副本所认可,就能保持”强一致性“了。
版本戳可用来检测并必冲突。读取并更新某份数据之后,可检测其版本戳,以确保在读取和写入之间,并没有其他人更新过此数据。
版本戳可以用计数器、GUID、”内容哗然码“、时间戳等方式来实现,也可将上述几种方式组合起来。
把数据库放到集群后,可把运算工作分布到多台计算机中去。此时,仍要试着减少通过网络传输的数据量,把某个节点所需要的数据尽可能多地放在该节点执行。
”CAP定理“断言:”一致性(Consistency)“、”可用性(Availaility)“和”分区耐受性(Partition Tolerance)“三者只可有其二。文档数据库试图用主从式数据复制技术来增强”可用性“。多个节点都保持同一份数据库,即便主节点故障,客户端也依然能获取数据。应用程序代码一般不需要检测主节点是否可用。MongoDB通过”副本集“实现”复制“,以提供较高的”可用性“