借助JArchitect探究Cassandra CLI内部机制

关系型数据库管理系统(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文件之间依赖权重的更为详细的说明。

时间: 2024-10-14 22:26:08

借助JArchitect探究Cassandra CLI内部机制的相关文章

Android Loader 异步加载详解二:探寻Loader内部机制

Android Loader 异步加载详解二:探寻Loader内部机制 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70259914 本文出自[赵彦军的博客] Android Loader 异步加载详解一:基础概念 Android Loader 异步加载详解二:探寻Loader内部机制 在上一篇文章中,讲解了 Loader 的基本概念.这一篇将会用实战的方式来探寻 Android Loader的内部机制.我们准备做一个 读取手

Microsoft SQL Server 查询处理器的内部机制与结构

摘要:本文介绍了在客户机上处理 Microsoft SQL Server 查询的方式,各种客户机与 SQL Server 的交互方式,以及 SQL Server 在处理客户机程序的请求时需要完成的工作. 简介 Microsoft(R) SQL Server(TM) 内部机制和结构是一个非常大的主题,因此本文仅限于程序开发人员感兴趣的问题,集中研究其他源中没有彻底讨论的问题.在讨论 SQL Server 的结构时,我们主要观察客户机的处理过程,研究不同的客户机程序与 SQL Server 的交互方

浅谈ASP.NET内部机制(六)

前言:大家都听说过也用过ASP.NET中的视图ViewState,到底ViewState本质上到底是什么东西?为什 么ASP.NET中没有他不行?下面就来谈谈... 我们一般在开发面向对象程序的时候,我们都是用对象保存数据的,比如用对象的属性,字段来保存 对象的状态.当调用对象的方法时,就可以改变对象的状态.释放对象后,对象的状态就消失.这点大家 都熟悉.在开发桌面程序的时候,没有什么问题,以为对象都一般在本地的内存中,直到不再用那个对象 ,我们就销毁它.但是在Web程序中,问题就大了,比如我们

如何通过Oracle的缓冲区内部机制调整性能

在本篇Oracle高级教程里,我会探讨Oracle数据缓冲区的内部机制--Oracle用这一内存来防止不必要的数据块从磁盘重读.理解Oracle数据缓冲区如何操作,是成功地运用它们调整数据库性能的关键. 在Oracle 8i以前的版本里,当数据块被从磁盘送进数据缓冲区的时候,数据块会被自动地放置到最近使用过的数据列表的前部.但是,这种行为从Oracle 8i开始就变了:新数据缓冲区被放置在缓冲区链的中部.在调节数据库的时候,你的目标就是为数据缓冲区分配尽量多的内存,而不会导致数据库服务器在内存里

数据-利用mysql内部机制执行运算问题

问题描述 利用mysql内部机制执行运算问题 mysql有没有这样的一种机制,我想用前一条数据的结果,然后插入一条新的数据:例如我这个表里有四个字段,分别是idcount0count1count2:我先查询到的前一条数据内容分别是id=1count0=1count1=2count2=3;然后我要插入一条id=2新的数据count0和count1分别加1,count2不变(id=2count0=2count1=3count2=3);如果按一般的思路,我先要查询id=1的数据,获取count0cou

移动App性能测评与优化1.3.1 Dalvik Heap内部机制

1.3.1 Dalvik Heap内部机制 为了弄清楚为什么DVM占着内存不释放,我们阅读了DVM分配内存部分的代码.位置在Android源码的dalvik/vm/alloc下,约255KB.分析的主要流程如下: 1)DVM使用mmap系统调用从系统分配大块内存作为Java Heap.根据系统机制,如果分类的内存尚未真正使用,就不计入PrivateDirty和Pss.例如图1-8所示,Heap Size/Alloc很多,但大部分是共享的,实际使用的较少.所以反映到PrivateDirty/Pss

hbase 协处理内部机制?

问题描述 hbase协处理内部机制?能不能直接用配置生成索引表? 解决方案 解决方案二:没人知道吗?给个答案啊!

javascript instanceof 内部机制探析_javascript技巧

比如: 复制代码 代码如下: // 代码 1 function Pig() {} var pig = new Pig(); alert(pig instanceof Pig); // => true function FlyPig() {} FlyPig.prototype = new Pig(); var flyPig = new FlyPig(); alert(flyPig instanceof Pig); // => true 来看另一段代码: 复制代码 代码如下: // 代码 2 fu

Zookeeper,etcd,consul内部机制和分布式锁和选主实现的比较

我的另外3篇文章分别介绍了Zookeeper,etcd,consul是如何实现分布式锁和选主的.本文想比较一下Zookeeper.etcd.consul内部机制有哪些不同,他们实现锁和选主的方式相同和不同. Zookeeper提供了临时节点,sequence,和变更通知.利用Zookeeper的这3个特性实现了按照sequence的顺序依次获取锁和成为主. etcd没有临时节点的概念,但是通过租约的方式提供了类似的功能.etcd没有sequence的概念,但是提供了全局递增的序列号revisio