关系型数据库管理系统(RDBMS)是存储和使用数据最常用的系统,但对于超 大量数据,这些数据库的扩展性不是很好。
近年来,由于对关系型数据库替代产品的需求日益增长,NoSQL的概念已经受 到广泛的欢迎。NoSQL背后的最大动机是可扩展性。NoSQL数据库解决方案提供了 一种存储和使用超大量数据的方法,而且开销更小,工作量更少,性能更好,停 机时间更短。
Apache Cassandra是一个基于列的NoSQL数据库。它是Facebook为推动其收件 箱搜索功能而开发的,后来成为Apache的开源项目。Twitter、Digg、Reddit及其 他许多组织都已经开始使用它。
Cassandra本身提供了一个非常基础的交互式命令行接口(CLI)。开发人员可 以使用CLI连接到集群中的远程节点,创建或更新模式以及设置和检索记录。
对于Cassandra管理员而言,CLI是一个有用的工具。即使只提供了基础的命令 ,它也是一个很好的例子,从中可以知道如何实现Cassandra客户端。要开发自定 义的Cassandra客户端甚至是扩展CLI工具,必须得了解CLI的内部工作原理。
本文将使用JArchitect工具和CQLinq语言分析CLI的代码库,以探究CLI的架构 模型。JArchitect工具用来分析代码结构,并指定设计原则,以获得更好的代码 质量。借助JArchitect,软件质量可以用代码度量进行测量,用“图 (graph)”和“树图(treemap)”进行可视化,并用标准和自 定义的规则来执行。
下面是分析得出的依赖关系图:
Cassandra使用了若干大家熟知的jar包,如antlr、log4j、slf4j、commons- lang,也使用了若干大家不怎么知道的jar包,比如下面这些:
Libthrift:它是一个跨多种编程语言和用例的API,其目标是尽可能高效和无 缝地实现跨语言通信和数据序列化的可靠性和高性能。
Snakeyaml:YAML是一个为人工可读性和与脚本语言交互而设计的数据序列化 格式。Cassandra的配置文件用了这一格式。
Jackson:一个高性能JSON processor。
Snappy:它是一个用C++编写的快速压缩/解压缩程序,最初由Google开发, snappy-java是其Java版本。
High-scale-lib:它是一个并发和高扩展性实用程序的集合,其目的是为了直 接取代包java.util.*或者java.util.concurrent.*中的集合类,而当许多CPU并 发使用集合时性能更好。
下图的矩阵图是对这些JAR文件之间依赖权重的更为详细的说明。