热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

详解NoSQL数据库ApacheCassandra的配置

在这里我们将介绍的是NoSQL数据库ApacheCassandra的配置与相关问题。现在数据库市场对于NoSQL的关注度日益升高,我们也该看到未来数据库技术的变革。上次说了安装的问题,可以参考《Vi

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

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

 
  1. if NOT DEFINED CASSANDRA_HOME set 
    CASSANDRA_HOME
    =%CD% 



改成

 
  1. if NOT DEFINED CASSANDRA_HOME set 
    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. #make install 


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

切换到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. TTransport transport = 
    new
     TSocket(
    "192.168.93.30"
    , 9160);              

  9. TProtocol protocol = 
    new
     TBinaryProtocol(transport);              

  10. Cassandra.Client client = 
    new
     Cassandra.Client(protocol);              

  11. transport.Open();              

  12. System.Text.Encoding utf8Encoding = System.Text.Encoding.UTF8;              

  13. long
     timeStamp = DateTime.Now.Millisecond;            

  14. ColumnPath nameColumnPath = 
    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. timeStamp,                            

  28. ConsistencyLevel.ONE);              

  29. ColumnOrSuperColumn returnedColumn = client.
    get
    (
    "Keyspace1"

    "1"
    , nameColumnPath, ConsistencyLevel.ONE);              

  30. Console.WriteLine(
    "Keyspace1/Standard1 列值: 键: {0}, 值: {1}"
    ,                                

  31. utf8Encoding.GetString(returnedColumn.Column.Name),                              

  32. utf8Encoding.GetString(returnedColumn.Column.Value));            

  33. transport.Close();              

  34. Console.ReadKey();          

  35. }    }} 


而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. /**     * @param args     
     

  18. * @throws Exception      
     


  19. */
          


  20. public
     
    static
     
    void
     main(String[] args) 
    throws
     Exception {          

  21. Long startTime = System.currentTimeMillis();           

  22. for
    (
    int
     i = 
    0
    ;i < 
    10000
    ;i++){              

  23. run();          

  24. }          

  25. Long endTime = System.currentTimeMillis();         System.out.println(
    "程序运行到此处计算机当前毫秒数 "
     + startTime);          

  26. System.out.println(
    "程序共计运行 "
    + (endTime-startTime)+
    " 毫秒"
    );      

  27.  }          

  28. static
     
    void
     run() 
    throws
     InvalidRequestException, UnavailableException, TimedOutException, TException, NotFoundException, UnsupportedEncodingException{        TTransport transport = 
    new
     TSocket(
    "192.168.93.30"
    ,
    9160
    );          

  29. TProtocol protocol = 
    new
     TBinaryProtocol(transport);          

  30. Cassandra.Client client = 
    new
     Cassandra.Client(protocol);          

  31. transport.open();          

  32. Long timeStamp = System.currentTimeMillis();                   

  33. ColumnPath nameColumnPath = 
    new
     ColumnPath(
    "Standard1"
    ,
    null
    ,bytes(
    "name"
    ));          

  34. client.insert(
    "Keyspace1"
    ,                        

  35. "1"
    ,                      nameColumnPath,                        

  36. bytes(
    "测试数据1"
    ),                      timeStamp,                      ConsistencyLevel.ONE);          

  37. client.insert(
    "Keyspace1"
    ,                        

  38. "2"
    ,                      nameColumnPath,                        

  39. bytes(
    "测试数据2"
    ),                      timeStamp,                      ConsistencyLevel.ONE);          

  40. ColumnOrSuperColumn returnedColumn = client.get(
    "Keyspace1"

    "1"
    , nameColumnPath, ConsistencyLevel.ONE);                  

  41. System.out.println(String.format(
    "key:%s;value:%s"
    ,                   

  42. new
     String(returnedColumn.column.name),                
    new
     String(returnedColumn.column.value,
    "utf-8"
    )));          

  43. transport.close();     

  44.  }    } 


原文标题:facebookde 的 NoSQL数据库cassandra的配置与调用(java&&c#)
推荐阅读
  • 介绍怎样在IntellijIdea中通过创建mavenproject配置MapReduce的编程环境。一、软件环境我使用的软件版本号例如以下:IntellijIdea2017.1M ... [详细]
  • 什么是堡垒机?堡垒机是一个主机系统,其自身通常经过了一定的加固,具有较高的安全性,可抵御一定的攻击,其作用主 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • Spring入门第十讲——Hibernate5.0.7+Struts2.3.24+Spring4.2.4三大框架整合开发
    回顾SSH框架至此,Hibernate-5.0.7、Struts-2.3.24和Spring-4.2.4这三个框架,我们已经都过了一遍了。现在,咱就要 ... [详细]
  • java日志框架详解
    Java日志框架详解1.常用日志框架1.1Java常用日志框架类别1.2Java常用日志框架历史1.3两大日志接口阵营1.3.1基于CommonsLogging接口实现的常用日志框 ... [详细]
  • 开发笔记:MyBatis03:ResultMap及分页
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了MyBatis03:ResultMap及分页相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Springboot的日志管理&Springboot整合Junit测试&Springboot中AOP的使用
    Springboot的日志管理springboot无需引入日志的包,springboot默认已经依赖了slf4j、logback、log4j等日志。我习惯用slf4j,下面就用sl ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • hackingTeam是如何被黑的
    hackingTeam是如何被黑的 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 利用Dubbo的SPI扩展容器
    在实际开发中,很多Dubbo的服务提供者都会运行在web容器上,如果提供者服务上同时对外 ... [详细]
  • 如今ApacheHadoop已成为大数据行业发展背后的驱动力。Hive和Pig等技术也经常被提到,但是他们都有什么功能,为什么会需要奇怪的名字(如Oozie,ZooKeeper、Flume) ... [详细]
author-avatar
liujiayan0529_584
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有