C/C++开发Cassandra的一些经验

一 前言

在项目将Cassandra作为备选环境之后,就开始考虑用C/C++进行开发。根据资料,目前Cassandra的C/C++接口,主要有thrift和libcassandra两种,官方网址分别为:

thrift: https://github.com/packaged/cassandrathrift

libcassandra:http://datastax.github.io/cpp-driver/

二 C/C++的thrift API

一开始我们采用的是thrift接口,毕竟thrift提供了多语言的相同接口。Cassandra安装、编译thrift接口也算简单,作为生手的我用一两个小时搞定了,具体可参见:

《cassandra的c++ driver》: http://blog.chinaunix.net/uid-12023855-id-3431018.html

但在开发时,却遇到了很头疼的麻烦,即“Exception: Default TException.  [Expected 4 or 0 byte int (1)]

在搜索到这篇博客:《关于Cassandra与Thrift在int/text/varint上的暧昧》后,因不能将表的clolumn类型由int修改为text或varint,只能放弃thrift。

私下以为,cassandra对类型匹配要求很严格,而提供的thrift接口却均以text为基础类型,是不是说明cassandra官方其实并不重视这种方式?

当然,如果环境中column的类型都可改为text,或者对thrift本省很熟悉,还是可以继续在这条路走下去的。

三 libcassandra编译安装

接下来重点介绍libcassandra,在CentOS的编译安装步骤如下:

  • 安装依赖包

sudo yum install automake cmake gcc-c++ git libtool openssl-devel

  • 编译安装libuv

从github(https://github.com/libuv/libuv/tree/v1.x)下载最新的源码安装包libuv-1.x.zip:

unzip libuv-1.x.zip

cd libuv-1.x

sh ./autogem.sh

./configure

sudo make install

  • 修改链接库目录

libuv(以及其它编译安装的库)的缺省安装目录为/usr/local/lib,不在系统的默认搜寻范围内。有两种方式修改,一种是设置系统环境参数LD_LIBRARY_PATH,另一种是修改配置文件/etc/ld.so.conf,这里采用第二种。

sudo echo "/usr/local/mysql/lib" >> /etc/ld.so.conf

sudo ldconfig

  • 编译安装cpp-driver

从github(https://github.com/datastax/cpp-driver)下载最新的源码安装包cpp-driver-master.zip:

unzip cpp-driver-master.zip

cd cpp-driver-master

cmake .

make

  • 生成的头文件和共享库文件在本目录,最好拷贝到/usr/local/相应目录下:

cp ./libcassandra* /usr/local/lib

cp ./include/cassandra.h /usr/local/include/

四 开发时注意事项

  • 标准C类型的API

libcassandra的API都以标准C的结构和函数形式提供,而不是C++形式的类和方法。不过与thrift形式的接口相比,libcassandra的API与Java API更相似,开发时可参考Java API找到相应的函数,再按cassandra.h的说明进行改造。

  • 避免内存泄漏

libcassandra使用的大多数结构,除少数,使用完后都必须释放内存,因此必须重视以避免造成内存泄漏。

  • 类型严格匹配

这点与在Java API一致,在bind和get时,参数与列类型是严格匹配的,不允许隐式的类型转换(例如int32与int64),务必引起重视。

先写这么多,示例代码以后补上。

时间: 2024-10-03 16:10:36

C/C++开发Cassandra的一些经验的相关文章

开发中各种小经验或技巧

1.js.jsp种判断list长度 js  :  list.length jsp: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>            list的长度是:${fn:le

Android开发60条技术经验总结

Android开发60条技术经验总结,以下是全文: 1. 全部Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有效. 2. 数据库表段字段常量和SQL逻辑分离,更清晰,建议使用Lite系列框架 LiteOrm 库,超级清晰且重心可以放在业务上不用关心数据库细节. 3. 全局变量放全局类中,模块私有放自己的管理类中,让常量清晰且集中. 4. 不要相信庞大的管理类的东西会带来什么好处,可能是一场灾难,而要时刻注意

Android 开发60条技术经验总结(转)

Android 开发60条技术经验总结: 1. 全部Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有效. 2. 数据库表段字段常量和SQL逻辑分离,更清晰,建议使用Lite系列框架 LiteOrm 库,超级清晰且重心可以放在业务上不用关心数据库细节. 3. 全局变量放全局类中,模块私有放自己的管理类中,让常量清晰且集中. 4. 不要相信庞大的管理类的东西会带来什么好处,可能是一场灾难,而要时刻注意单一职责原

APP开发流程(项目实战经验)

不专业的人总喜欢站在专业的角度指挥专业的人,导致创业小BOSS输在了权力的虚荣之上. 从业以来,对两年的APP开发失败与成功经验总结,写此文章给行业创业者.遇到很多固执的创业BOSS坚持己见,认为做好视觉设计就可以为自己带来用户量.等到产品出问题的时候,已经没有资金支撑接下来的运营. 要点:真对忽视产品需求.产品原型确立.直接进入视觉设计的开发者们! 1.确立产品原型,进入项目评估阶段.经过反复确认,最终形成产品基本框架和完整的需求文档.(项目市场分析调研确立的前提下) 2.正式进入产品原型设计

ueditor1.4.3在.net环境下的vs开发工具中集成经验

Ueditor是个很不错的在线富文本编辑器,几个项目一直使用它.最近想更新版本,发现新版1.4.3与旧版的部署方式完全不一样了,官网文档介绍的是直接放在iis下的部署说明,没有提到在vs开发工具中如何集成,自己新建了一个测试项目琢磨了一会,测试没啥问题,记录下给大家分享. 项目结构如下图: 因为我创建的是web项目类型,所以把controller.ashx以项目形式的一般处理程序迁移过去,并重命名成ueditor.ashx(记得在ueditor.config.js修改服务器统一请求接口路径).另

Entity Framework 实体框架的形成之旅--实体框架的开发的几个经验总结

在前阵子,我对实体框架进行了一定的研究,然后把整个学习的过程开了一个系列,以逐步深入的方式解读实体框架的相关技术,期间每每碰到一些新的问题需要潜入研究.本文继续前面的主题介绍,着重从整体性的来总结一下实体框架的一些方面,希望针对这些实际问题,和大家进行学习交流. 我的整个实体框架的学习和研究,是以我的Winform框架顺利升级到这个实体框架基础上为一个阶段终结,这个阶段事情很多,从开始客运联网售票的WebAPI平台的开发,到微软实体框架的深入研究,以及<基于Metronic的Bootstrap开

Android开发软件架构思考以及经验总结

前言 架构设计,到底是什么呢?基于这段时间的学习和自己的一些思考,我认为架构是基于产品和技术所达成的一种共识.我不是专业的架构师,也不是经验老道的开发者.本文目的有三,一是整理这段时间的架构学习和思考以及总结这一年的开发经验教训,二是希望能够与各位朋友探讨移动端App的架构设计,三是希望我们每一个应用开发者能够拥有架构的意识.个人的水平有限,文中如果不当之处,还希望批评指正. 知识大纲 一.萌芽 二.初识架构 1.阅读<架构之美>之论架构 2.分析行业内各个APP的架构演进 (1)架构为什么需

保险业个险计价模块开发的数据建模经验分享

前段时间在开发某大型保险公司的项目,其中,涉及到个险计价的模块,之前没接触过保险业,一看他们某险种的费率表,顿时惊呆了,是一个四维的表,也就是,四种因素(性别.保险期间.交费期间.年龄)决定一个价格,还有一个影响最终保费的因素,就是保额(也就是保险金额---最大赔付金额),但这个跟价格的关系是线性的,得出标记所以这里就忽略它不谈了. 某险种的费率表如下图所示: 这是某险种的费率表,要通过四个条件得出一个价格,如某男,保险期间设为30年,交费期间为10年,假如他现在的年龄是14岁,那他的保费价格是

android日常开发总结的技术经验60条

1. 全部Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有效. 2. 数据库表段字段常量和SQL逻辑分离,更清晰,建议使用Lite系列框架LiteOrm库,超级清晰且重心可以放在业务上不用关心数据库细节. 3. 全局变量放全局类中,模块私有放自己的管理类中,让常量清晰且集中. 4. 不要相信庞大的管理类的东西会带来什么好处,可能是一场灾难,而要时刻注意单一职责原则,一个类专心做好一件事情更为清晰. 5. 如