关于cassandra:Cassandra入门
1. 简介 Apache Cassandra是由 Facebook 创立的高度可扩大、高性能的分布式NoSQL数据库,能够灵便的在线扩容,满足业务水平扩大的需要。具备可能解决大量数据的分布式架构。 数据搁置在具备多个复本因子的不同机器上,以取得高可用性,而无需放心单点故障。 2. 个性分布式和去中心化 Cassandra 是分布式的,这意味着它能够运行在多台机器上,并出现给用户一个统一的整体。你能够释怀地将数据写到集群的任意一台机器上,Cassandra 都会收到数据。去中心化意味着 Cassandra 不会存在单点生效。Cassandra 集群中的所有节点的性能都齐全一样, 所以不存在一个非凡的主机作为主节点来承当协调工作。 弹性可扩大 节点间应用gossip协定通信,不须要重新启动过程,不用批改利用的查问,也无需本人手工从新平衡数据分布。在 Cassandra 里,你只有退出新的计算机,Cassandra 就会主动地发现它并让它开始工作。 可调节的一致性 CAP 定律表明,对于任意给定的零碎,只能在一致性(Consistency)、可用性(Availability)以及分区容错性(Partition Tolerance)之间抉择两个。所以 Cassandra 在设计的时候也不得不思考这些问题,因为分区容错性这个是每个分布式系统必须思考的,所以只能在一致性和可用性之间做抉择,而 Cassandra 的利用场景更多的是为了满足可用性,所以咱们只能就义一致性了。然而依据 BASE 实践,咱们其实能够通过就义强一致性取得可用性。 Cassandra 提供了可调节的一致性,容许咱们选定须要的一致性程度与可用性程度,在二者间找到平衡点。因为客户端能够管制在更新达到多少个正本之前,必须阻塞零碎。这是通过设置正本因子(replication factor)来调节与之绝对的一致性级别。 通过正本因子(replication factor),你能够决定筹备就义多少性能来换取一致性。正本因子是你要求更新在集群中流传到的节点数(留神,更新包含所有减少、删除和更新操作)。 客户端每次操作还必须设置一个一致性级别(consistency level)参数,这个参数决定了多少个正本写入胜利才能够认定写操作是胜利的,或者读取过程中读到多少个正本正确就能够认定是读胜利的。这里 Cassandra 把决定一致性水平的权力留给了客户本人。 所以,如果需要的话,你能够设定一致性级别和正本因子相等,从而达到一个较高的一致性程度,不过这样就必须付出同步阻塞操作的代价,只有所有节点都被更新实现能力胜利返回一次更新。而实际上,Cassandra 个别都不会这么来用,起因不言而喻(这样就丢失了可用性指标,影响性能,而且这不是你抉择 Cassandra 的初衷)。而如果一个客户端设置一致性级别低于正本因子的话,即便有节点宕机了,依然能够写胜利。 总体来说,Cassandra 更偏向于 CP,尽管它也能够通过调节一致性程度达到 AP;然而不举荐你这么设置。 高可用和容错 从个别架构的角度来看,零碎的可用性是由满足申请的能力来量度的。但计算机可能会有各种各样的故障,从硬件器件故障到网络中断都有可能。任何计算机都可能产生这些状况,所以它们个别都有硬件冗余,并在产生故障事件的状况下会主动响应并进行热切换。对一个须要高可用的零碎,它必须由多台联网的计算机形成,并且运行于其上的软件也必须可能在集群条件下工作,有设施可能辨认节点故障,并将产生故障的节点的性能在残余零碎上进行复原。 Cassandra 就是高可用的。你能够在不中断零碎的状况下替换故障节点,还能够把数据分布到多个数据中心里,从而提供更好的本地拜访性能,并且在某一数据中心产生火灾、洪水等不可抗劫难的时候避免零碎彻底瘫痪。 面向行 Cassandra 常常被看做是一种面向列(Column-Oriented)的数据库,这也并不算错。它的数据结构不是关系型的,而是一个多维稠密哈希表。稠密(Sparse)意味着任何一行都可能会有一列或者几列,但每行都不肯定(像关系模型那样)和其余行有一样的列。每行都有一个惟一的键值,用于进行数据拜访。所以,更确切地说,应该把 Cassandra 看做是一个有索引的、面向行的存储系统。 Cassandra 的数据存储构造根本能够看做是一个多维哈希表。这意味着你不用当时准确地决定你的具体数据结构或是你的记录应该蕴含哪些具体字段。这特地适宜处于草创阶段,还在一直减少或批改服务个性的利用。而且也特地适宜利用在麻利开发我的项目中,不用进行长达数月的事后剖析。对于应用 Cassandra 的利用,如果业务发生变化了,只须要在运行中减少或删除某些字段就行了,不会造成服务中断。 当然, 这不是说你不须要思考数据。相同,Cassandra 须要你换个角度看数据。在 RDBMS 里, 你得首先设计一个残缺的数据模型, 而后思考查问形式, 而在 Cassandra 里,你能够首先思考如何查问数据,而后提供这些数据就能够了。 ...