详解NoSQL数据库Apache Cassandra的配置

在这里我们将介绍的是NoSQL数据库Apache Cassandra的配置与相关问题。现在数据库市场对于NoSQL的关注度日益升高,我们也该看到未来数据库技术的变革

上次说了安装的问题,可以参考《VirtualBox 虚拟机 Debian系统上安装Cassandra步骤及遇到的问题》。当然,在windows下也可以使用,但是要设置JAVA_HOME参数,然后启动目录 bin里的cassandra.bat。编辑cassandra.bat看到

 
 
  1. ifNOTDEFINEDCASSANDRA_HOMEset CASSANDRA_HOME =%CD%

改成

 
 
  1. ifNOTDEFINEDCASSANDRA_HOMEset CASSANDRA_HOME = F :/apache-cassandra-0.5.1

“F:/apache-cassandra-0.5.1”是我的安装目录。

一、cassandra的单节点服务器配置

先说下cassandra的配置,还是讲Linux下的。需要配置的文件一共有三个,当然,也可以使用默认配置。

这个三个文件分别是:

bin/cassandra.in.sh

conf/log4j.properties

conf/storage-conf.xml

其中,log4j.properties是日志的配置,其它两个是配置的运行环境。

cassandra.in.sh文件一般不需要调整,当然,加入你没有使用alternatives调整java的默认环境,而你又需要使用 jre6.0,这种情况下,可以设置cassandra.in.sh中

 
 
  1. # JAVA_HOME =/usr/local/jdk6

JAVA_HOME=/usr/local/jre6 #这里是你的jre解压缩的路径

log4j.properties的配置网上讲的很多,就不说了。

storage-conf.xml的配置是最重要的。

第一个是Keyspaces,这个默认只设置了Keyspace1,可以增加另外的Keyspaces。客户端调用需要使用这个名字。

Keyspace节点中的KeysCachedFraction设置的键索引的内存大小。说明上也写了,假如键的数量较少,长度较长,可以增加这个 值。而设置为0,则是禁用。

接下来是设置ColumnFamily,这里配置的名称,在客户端调用时候也要是有。另外还指定了列的类型。

ReplicationFactor设置了副本的数目,这个是在分布式部署中有用,保持数据的冗余,以至于某几台服务坏掉,能保证数据完整。

CommitLogDirectory以及接下来的几行都是设置目录的,这个就不说了。

Seeds也是和分部署主从服务器部署方式有关的,本文不准备讲这个。

ThriftAddress是比较重要的,这个是设置客户端访问的,而ThriftPort是设置访问的端口。接下来的部分是和性能有关的,这些说 明可以仔细阅读。贫道对下面的设置也理解不深入,就不献丑了。

二、如何编程访问cassandra

从http://incubator.apache.org/cassandra/找了好久,找到了http://github.com /rantav/hector(java)。这个是一个访问cassandra的包装。很遗憾的是,我使用这个包装访问时候,读取一个Key的值需要 7~8秒!!!晕倒。我开始以为是虚拟机的原因,结果部署到其他两台linux服务器上还是一样。当然这些机器和我的机器都不在同一个网段,我不知道这点 是不是会对性能有很大的影响。后来,我放到自己机器上,以及把写好的程序当道目标机器上,读取速度变成了20MS每条。性能相差也太大了。一个是速度慢得 和蚂蚁一样,而第二次则是坐上乌龟了。

其它语言的访问包装可以在http://wiki.apache.org/cassandra/ClientExamples这里找到。当然,没 有C#的。

三、用C#和Java访问cassandra

cassandra用到了另外一个好用的东西:thrift。这个小编可以在http://www.thrift-rpc.org/下载。

具体在http://www.thrift-rpc.org/?p=thrift.git;a=shortlog;h=refs/misc /instant,一般点第一个snapshot就行了,这是最新的。版本几个小时更新一个,太牛叉了。

下载完后,搞到Linux上,解压。进入目录后进行安装。

 
 
  1. #chmod+x*//设置执行权限
  2. #./bootstrap.sh
  3. #./configure
  4. #make
  5. #makeinstall

安装好了,接下来,开始生成操作。

切换到cassandra的interface目录。

然后,使用/home/xieping/thrift/ompiler/cpp/thrift -gen csharp cassandra.thrift 命令生成。运行该命令后,在interface目录增加了gen-csharp目录。把它搞到你的机器,然后,切换到/home/xieping /thrift/lib/csharp目录。把src目录搞下来。打开Thrift.csproj文件,右键Thrift项目,设置编译符号为 NET_2_0。新建个C#项目,把gen-csharp目录下的东西添加进去,然后,引用Thrift项目,就可以写以下代码调用:

 
 
  1. using System;
  2. using Thrift.Transport;
  3. using Thrift.Protocol;
  4. using Apache.Cassandra; namespace TestCa{
  5. class Program{
  6. static void Main( string []args)
  7. {
  8. TTransporttransport= new TSocket( "192.168.93.30" ,9160);
  9. TProtocolprotocol= new TBinaryProtocol(transport);
  10. Cassandra.Clientclient= new Cassandra.Client(protocol);
  11. transport.Open();
  12. System.Text.Encodingutf8Encoding=System.Text.Encoding.UTF8;
  13. long timeStamp=DateTime.Now.Millisecond;
  14. ColumnPathnameColumnPath= new ColumnPath(){
  15. Column_family= "Standard1" ,
  16. Column=utf8Encoding.GetBytes( "name" )
  17. };
  18. client.insert( "Keyspace1" ,
  19. "1" ,nameColumnPath,
  20. utf8Encoding.GetBytes( "测试输入1" ),
  21. timeStamp,
  22. ConsistencyLevel.ONE);
  23. client.insert( "Keyspace1" ,
  24. "2" ,
  25. nameColumnPath,
  26. utf8Encoding.GetBytes( "测试输入2" ),
  27. ConsistencyLevel.ONE);
  28. ColumnOrSuperColumnreturnedColumn=client. get ( "Keyspace1" , "1" ,ConsistencyLevel.ONE);
  29. Console.WriteLine( "Keyspace1/Standard1列值:键:{0},值:{1}" ,
  30. utf8Encoding.GetString(returnedColumn.Column.Name),
  31. utf8Encoding.GetString(returnedColumn.Column.Value));
  32. transport.Close();
  33. Console.ReadKey();
  34. }}}

而Java的就变成

/home/xieping/thrift/ompiler/cpp/thrift -gen java cassandra.thrift

java相应的代码

 
 
  1. import static me.prettyprint.cassandra.utils.StringUtils.bytes;
  2. import java.io.UnsupportedEncodingException;
  3. import org.apache.cassandra.service.Cassandra;
  4. import org.apache.cassandra.service.ColumnOrSuperColumn;
  5. import org.apache.cassandra.service.ColumnPath;
  6. import org.apache.cassandra.service.ConsistencyLevel;
  7. import org.apache.cassandra.service.InvalidRequestException;
  8. import org.apache.cassandra.service.NotFoundException;
  9. import org.apache.cassandra.service.TimedOutException;
  10. import org.apache.cassandra.service.UnavailableException;
  11. import org.apache.thrift.TException;
  12. import org.apache.thrift.protocol.TBinaryProtocol;
  13. import org.apache.thrift.protocol.TProtocol;
  14. import org.apache.thrift.transport.*; public class Program{
  15. public class s{
  16. }
  17. /***@paramargs
  18. *@throwsException
  19. */
  20. public static void main(String[]args) throws Exception{
  21. LongstartTime=System.currentTimeMillis();
  22. for ( int i= 0 ;i< 10000 ;i++){
  23. run();
  24. }
  25. LongendTime=System.currentTimeMillis();System.out.println( "程序运行到此处计算机当前毫秒数" +startTime);
  26. System.out.println( "程序共计运行" +(endTime-startTime)+ "毫秒" );
  27. }
  28. static void run() throws InvalidRequestException,UnavailableException,TimedOutException,TException,NotFoundException,UnsupportedEncodingException{TTransporttransport= new TSocket( "192.168.93.30" , 9160 );
  29. TProtocolprotocol= new TBinaryProtocol(transport);
  30. Cassandra.Clientclient= new Cassandra.Client(protocol);
  31. transport.open();
  32. LongtimeStamp=System.currentTimeMillis();
  33. ColumnPathnameColumnPath= new ColumnPath( "Standard1" , null ,bytes( "name" ));
  34. client.insert( "Keyspace1" ,
  35. "1" ,
  36. bytes( "测试数据1" ),timeStamp,ConsistencyLevel.ONE);
  37. client.insert( "Keyspace1" ,
  38. bytes( "测试数据2" ),ConsistencyLevel.ONE);
  39. ColumnOrSuperColumnreturnedColumn=client.get( "Keyspace1" ,ConsistencyLevel.ONE);
  40. System.out.println(String.format( "key:%s;value:%s" ,
  41. new String(returnedColumn.column.name), new String(returnedColumn.column.value, "utf-8" )));
  42. transport.close();
  43. }}
原文标题: facebookde 的 NoSQL数据库cassandra的配置与调用(java&&c#)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读752次。关系型数据库关系型数据库是一个结构化的数据库,创建在关系模型(二维表模型)基础上,一般面向于记录SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作主流的关系数据库包括Oracle、Mysql、SQL Server、Microsoft Access、DB2等非关系型数据库NoSQL(nOSQL=Not Only SQL),意思是“不仅仅是SQL”,是非关系型数据库的总称。除了主流的关系型数据库外的数据库,都认为是非关系型主流的NoSQ.._redis是非关系型数据库吗
文章浏览阅读687次,点赞2次,收藏5次。商城系统中,抢购和秒杀是很常见的营销场景,在一定时间内有大量的用户访问商场下单,主要需要解决的问题有两个:1. 高并发对数据库产生的压力;2. 竞争状态下如何解决商品库存超卖;高并发对数据库产生的压力对于第一个问题,使用缓存来处理,避免直接操作数据库,例如使用 Redis。竞争状态下如何解决商品库存超卖对于第二个问题,需要重点说明。常规写法:查询出对应商品的库存,判断库存数量否大于 0,然后执行生成订单等操作,但是在判断库存是否大于 0 处,如果在高并发下就会有问题,导致库存_php库存结余并发
文章浏览阅读1.4k次。MongoTemplate开发spring-data-mongodb提供了MongoTemplate和MongoRepository两种方式访问MongoDB,MongoRepository的方式访问较为简单,MongoTemplate方式较为灵活,这两种方式在Java对于MongoDB的运用中相辅相成。_springboot插入指定的mongodb数据库
文章浏览阅读887次,点赞10次,收藏19次。1.背景介绍1. 背景介绍NoSQL数据库是一种非关系型数据库,它的特点是可以存储非结构化的数据,并且可以处理大量的数据。HBase是一个分布式、可扩展的列式存储系统,它是基于Google的Bigtable设计的。HBase是一个开源的NoSQL数据库,它的核心功能是提供高性能的随机读写访问。在本文中,我们将对比HBase与其他NoSQL数据库,例如Redis、MongoDB、Cass...
文章浏览阅读819次。MongoDB连接失败记录_edentialmechanisn-scram-sha-1
文章浏览阅读470次。mongodb抽取数据到ES,使用ELK内部插件无法获取数据,只能试试monstache抽取mongodb数据,但是monstache需要mongodb replica set 模式才能采集数据。############monstache-compose文件。#replicas set 启动服务。# 默认备份节点不能读写,可以设置。# mydb指的是需要同步的数据库。#登录主mongodb初始化rs。#primary 创建用户。# ip地址注意要修改。# ip地址注意要修改。_monstache csdn
文章浏览阅读913次,点赞4次,收藏5次。storage:fork: trueadmin登录切换数据库注意: use 代表创建并使用,当库中没有数据时默认不显示这个库删除数据库查看表清单> show tables # 或者 > show collections表创建db.createCollection('集合名称', [options])table1字段类型描述capped布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。_mongodb5
文章浏览阅读862次。Centos7.9设置MongoDB开机自启(超全教程,一条龙)_mongodb centos开机启动脚本
文章浏览阅读1.3k次,点赞6次,收藏21次。NoSQL数据库使用场景以及架构介绍
文章浏览阅读856次,点赞21次,收藏20次。1.背景介绍1. 背景介绍NoSQL数据库是一种非关系型数据库,它的设计目标是为了解决传统关系型数据库(如MySQL、Oracle等)在处理大量不结构化数据方面的不足。NoSQL数据库可以处理大量数据,具有高性能、高可扩展性和高可用性。但是,与关系型数据库不同,NoSQL数据库没有固定的模式,数据结构也不一定是表格。在NoSQL数据库中,数据存储和查询都是基于键值对、列族、图形等不同的...
文章浏览阅读416次。NoSQL定义:非关系型、分布式、开放源码和具有横向扩展能力的下一代数据库。由c++编写的开源、高性能、无模式的基于分布式文件存储的文档型数据库特点:高性能、高可用性、高扩展性、丰富的查询支持、可替换已完场文档某个指定的数据字段应用场景:社交场景:使用mongodb存储用户信息游戏场景:用户信息,装备积分物流场景:订单信息,订单状态场景操作特点:数据量大;读写操作频繁;价值较低的数据,对事物性要求不高开源、c语言编写、默认端口号6379、key-value形式存在,存储非结构化数据。_nosql
文章浏览阅读1.5k次,点赞3次,收藏2次。Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: Failed to create socket. at redis.clients.jedis.DefaultJedisSocketFactory.createSocket(DefaultJedisSocketFactory.java:110) at redis.clients.jedis.Connection.connect(Conne_redis.clients.jedis.exceptions.jedisconnectionexception: failed to create so
文章浏览阅读6.5k次,点赞3次,收藏12次。readAnyDatabase(在所有数据库上都有读取数据的权限)、readWriteAnyDatabase(在所有数据库上都有读写数据的权限)、userAdminAnyDatabase(在所有数据库上都有管理user的权限)、dbAdminAnyDatabase(管理所有数据库的权限);:clusterAdmin(管理机器的最高权限)、clusterManager(管理和监控集群的权限)、clusterMonitor(监控集群的权限)、hostManager( 管理Server);_mongodb创建用户密码并授权
文章浏览阅读593次。Redis是一个基于内存的键值型NoSQL数据库,在实际生产中有着非常广泛的用处_搭建本地redis
文章浏览阅读919次。Key 的最佳实践[业务名]:[数据名]:[id]足够简短:不超过 44 字节不包含特殊字符Value 的最佳实践:合理的拆分数据,拒绝 BigKey选择合适数据结构Hash 结构的 entry 数量不要超过 1000(默认是 500,如果达到上限则底层会使用哈希表而不是 ZipList,内存占用较多)设置合理的超时时间批量处理的方案:原生的 M 操作Pipeline 批处理注意事项:批处理时不建议一次携带太多命令。Pipeline 的多个命令之间不具备原子性。_redis高级实战
文章浏览阅读1.2k次。MongoDB 递归查询_mongodb数据库 递归
文章浏览阅读1.2k次。通过实际代码例子介绍:如何通过MongoTemplate和MongoRepository操作数据库数据_springboot操作mongodb
文章浏览阅读687次,点赞7次,收藏2次。首先欢迎大家阅读此文档,本文档主要分为三个模块分别是:Redis的介绍及安装、RedisDesktopManager可视化工具的安装、主从(哨兵)模式的配置。_redis 主从配置工具
文章浏览阅读764次。天下武功,无坚不摧,唯快不破!我的名字叫 Redis,全称是 Remote Dictionary Server。有人说,组 CP,除了要了解她外,还要给机会让她了解你。那么,作为开发工程师的你,是否愿意认真阅读此心法抓住机会来了解我,运用到你的系统中提升性能。我遵守 BSD 协议,由意大利人 Salvatore Sanfilippo 使用 C 语言编写的一个基于内存实现的键值型非关系(NoSQL)..._redis 7.2 源码
文章浏览阅读2k次。MongoDB 的增删改查【1】_mongodb $inc