工作的需要,开始更多地倾向于去中心化的结构,目前看来Cassandra算是去中心化DB中性能/管理最热门的选择,崇尚其P2P的理念。

自身原因对JAVA不擅长(周围写C的好少),还是更热衷于C++/JS,所以把Cassandr C++/NODEJS(内网环境下)搭建的过程记录下来,共同好者分享。

1,一些条件:

VituralBox 4.3 Win7 x64

Centos 6.4 x64_86(来自某国内某镜像网站)

thrift-0.9.1.tar.gz

openssl-1.0.1e.tar.gz

apache-cassandra-2.0.2-bin.tar.gz

repo指向

[base]
name=CentOS-$releasever - Base
baseurl=file:///media
enable=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

2,预埋YUM库

//DVD1

yum install -y automake libtool flex bison pkgconfig gcc-c++ boost-devel zlib-devel python-devel ruby-devel openssl-devel

yum install -y crypto-utils openssl

//DVD2

rpm -ivh libevent-devel-1.4.13-4.el6.x86_64.rpm libevent-doc-1.4.13-4.el6.noarch.rpm libevent-headers-1.4.13-4.el6.noarch.rpm

(libevent-devel 纯本地盘似乎不支持yum)

3,openssl安装

./config no-shared no-idea no-mdc2 no-rc5 zlib enable-tlsext no-ssl2 --prefix=/usr/local –openssldir=/usr/local/openssl

make depend

make

make install

4,thrift安装(依赖boost、libcry、libssl)

./configure

make

make install

5,生成CPP 4 CASSANDR驱动

cd /opt/cassandra/interface

thrift --gen cpp cassandra.thrift

[root@cent4 gen-cpp]# ll
total 2488
-rwxr-xr-x. 1 root root 1420936 Nov 21 07:33 aa
-rw-r--r--. 1 root root 3292 Nov 21 09:11 aa.cpp
-rw-r--r--. 1 root root 215304 Nov 19 09:11 aa.o
-rw-r--r--. 1 root root 390 Nov 19 20:32 cassandra_constants.cpp
-rw-r--r--. 1 root root 456 Nov 19 20:31 cassandra_constants.h
-rw-r--r--. 1 root root 474152 Nov 19 07:02 Cassandra.cpp
-rw-r--r--. 1 root root 186568 Nov 19 07:02 Cassandra.h
-rw-r--r--. 1 root root 9713 Nov 19 07:06 Cassandra_server.cpp
-rw-r--r--. 1 root root 9713 Nov 19 07:02 Cassandra_server.skeleton.cpp
-rw-r--r--. 1 root root 135803 Nov 19 07:02 cassandra_types.cpp
-rw-r--r--. 1 root root 69527 Nov 19 07:02 cassandra_types.h

5,编译C++ SAMPLE

.bash_profile 加下  export LD_LIBRARY_PATH=/usr/local/lib

g++ -I/usr/local/include/thrift aa.cpp  Cassandra.cpp cassandra_types.cpp -L/usr/local/lib -lthrift  -o aa

6,加载Nodejs SAMPLE

nodejs使用的是某大神写的node-cassandra-cql-master,比较好用。

对于内网的服务器,可以先CLONE一台能上网的,npm install node-cassandra-cql-master,然后把nodejs和 node-cassandra-cql-master直接scp就能使用

var cql = require('node-cassandra-cql');
var client = new cql.Client({hosts: ['192.168.137.104:9042'], keyspace: 'mykeyspace'});

client.execute('select * from users',['ConsistencyLevel.QUORUM'],
function(err, result)
{
if (err)
console.log('execute failed: '+err);
else
console.log('xxxx' + result.rows+'\n');
}
);

//client.shutdown();

client.streamRows('select * from standard9',
function(err, row) {
//the callback will be invoked per each row as soon as they are received
if (err)
console.log("Oh dear..."+err);
else {
console.log('sssse', row.get('name')+':'+row.get('age'));
}
}
);

==============================

7,建张SAMPLE表

create column family standard9 with
key_validation_class=UTF8Type and
comparator = UTF8Type and
column_metadata =
[
{column_name:name ,validation_class:UTF8Type},
{column_name: value, validation_class:UTF8Type},
{column_name: age, validation_class:UTF8Type},
];

插一下垃圾数据

insert into standard9 (key,name, value) values ('1745','aaa', 'bbb');
insert into standard9 (key,name, value) values ('1744','QWER', 'ddd');
insert into standard9 (key,age,name, value) values ('2931','99', 'ZXCV','AAA');

8,把system_autch replication_factor增加下

ALTER KEYSPACE system_auth WITH REPLICATION =  {'class' : 'NetworkTopologyStrategy', 'dc2' : 2};

建议全keyspace走NTSnitch

否则会遇到cassandra的一致性报错

9,接下来跑apache给的examples

注意其中的cass.set_keyspace("mykeyspace");

string key = "2222";还有一些值需要设置为true的属性。

一些接口说明的文档网上都有,不再详述。

10,总结

走thrift可以让开发人员更好地掌握数据结构、接口定义及一些thrift底层原理。横扩移植需要一些基础库。

走NodeJS,开发效率相对较高,横扩移植能力强。

未来,如果cassandra能增补regularexpress或者rawdevice,多吸引点粉丝,就更好了。

Cassandra C++/NodeJs开发环境的更多相关文章

  1. Win7搭建NodeJs开发环境以及HelloWorld展示—图解

    Windows 7系统下搭建NodeJs开发环境(NodeJs+WebStrom)以及Hello World!展示,大体思路如下:第一步:安装NodeJs运行环境.第二步:安装WebStrom开发工具 ...

  2. CentOS 7快速搭建Nodejs开发环境

    Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好.学习Nodejs首先需要会安装环境.这里我介绍如 ...

  3. Win7搭建NodeJs开发环境

    Win7搭建NodeJs开发环境以及HelloWorld展示—图解 Windows 7系统下搭建NodeJs开发环境(NodeJs+WebStrom)以及Hello World!展示,大体思路如下:第 ...

  4. NodeJS开发环境配置

    "Node.js 是服务器端的 JavaScript 运行环境,它具有无阻塞(non-blocking)和事件驱动(event-driven)等的 特色,Node.js 采用 V8 引擎,同 ...

  5. NodeJS开发环境搭建

    原创作者: zero20121222 NodeJS开发环境搭建 1.安装NodeJS 1.编译环境 源代码编译器,通常 Unix/Linux平台都自带了C++的编译器(GCC/G++).如果没有,请通 ...

  6. Windows平台搭建NodeJs开发环境以及HelloWorld展示—图解

    Windows 7系统下搭建NodeJs开发环境(NodeJs+WebStrom)以及Hello World!展示,大体思路如下:第一步:安装NodeJs运行环境.第二步:安装WebStrom开发工具 ...

  7. 搭建NodeJS开发环境

    Windows10下搭建NodeJS开发环境 ======================================== 下载 NodeJS 安装包,最好使用LTS长期支持正式版 下载见 如下链 ...

  8. windows下的Nodejs及npm的安装、常用命令,Nodejs开发环境配置

    http://www.cnblogs.com/webstorm/p/5744942.html ***************************************** 第一步:下载Nodej ...

  9. win10下用Linux搭建python&nodejs开发环境

    Win10下用自带Linux系统搭建开发环境 Win10下用自带Linux系统搭建开发环境启用Linux老版本(win10 1709之前):新版本(win10 1709之后)卸载linux老版本新版本 ...

随机推荐

  1. 证明 poj 1014 模优化修剪,部分递归 有错误

    这个问题是存在做.我发现即使是可行的一个问题,但不一定正确. 大部分数据疲软,因为主题. id=1014">poj 1014 Dividing 题目大意:有6堆石头,权重分别为1 2 ...

  2. XCL-Charts绘画面积图(AreaChart) 例1

    样本区域地图,发现区域图的时候把做向上注视位置图更具优势的管理.在改变. 区域图网格和轴是不一样的处理与其它图, 它是用来表示其影响范围的覆盖范围,车桥无段伸出. 在这里下处理. watermark/ ...

  3. PLSQL Developer下报错信息显示乱码问题

    PLSQL Developer下报错信息显示乱码问题 连接环境:win 7 数据库版本号:oracle 11g 模拟一个错误,查看错误提示显示"????"乱码问题,例如以下: 检查 ...

  4. 汉字Collection

    只是上一行Demo private static string[] HanZis = new string[]{ "啊阿呵吖嗄腌锕爱矮挨哎碍癌艾唉哀蔼隘埃皑呆嗌嫒瑷暧捱砹嗳锿霭按安暗岸俺案鞍 ...

  5. STM32F4xx时钟理解

    理解力STM32时钟是我们的应用定时器等的基础,据总结近期工作: 以下是一STM32时钟树: 1.首先注意的的是图中画绿色圈圈的两个,HSE和HSI分别表示外部时钟和内部时钟,当中HSE 是是快速外部 ...

  6. WCF分布式事务(EF)

    才说分布式事务,首先,了解一下什么是交易. 事务有四个特性:ACID A是Atomicity,原子性.一个事务往往涉及到很多的子操作,原子性则保证这些子操作要么都做,要么都不做,而不至于出现事务的部分 ...

  7. Visual Studio 2015使用EF6的ModelFirst模式添加实体数据模型缺少tt文件问题

    在看实体框架 (EF) 入门的时候,当按照样例做到ModelFirst的时候出问题了 这是使用vs2015新建的实体数据模型 这是官网样例 对比样例截图,会发现里面缺少.tt的文件.最重要的是最终代码 ...

  8. Java IO的RandomAccessFile的使用(转)

    现有如下的一个需求,向已存在1G数据的txt文本里末尾追加一行文字,内容如下“Lucene是一款非常优秀的全文检索库”.可能大多数朋友会觉得这个需求很easy,说实话,确实easy,然后XXX君开始实 ...

  9. 初探boost之progress_display库学习笔记

    progress_display 用途 progress_display能够在控制台上显示程序的运行进度,假设程序运行非常耗费时间,那么它能提供一个友好的用户界 面,不至于让用户在等待中失去耐心,甚至 ...

  10. Android日志收集功能设计和实施报告(总)

    几乎所有的应用程序开发者都知道"用户体验"重视,为了增强用户体验是从全面的监测和报告制度密不可分,在这些日志(控制Crash报告)是主要的问题跟踪和解决工具. 日志上报系统.首先看 ...