`
conquer0
  • 浏览: 78321 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

cassandra内部API使用二2010-07-07

阅读更多
    /**根据Key和column从缓存读取数据.
     * @param aKeyArea Key
     * @param aName column
     * @return Object 缓存数据
     */
    public Object get(String aKeyArea, String aName)
    {
        Map<String, Object> resultMap = getResultMap(aKeyArea, aName);

        if (resultMap != null)
        {
            return resultMap.get(CacheConstants.CACHE_MAP_KEY_VALUE);
        }
        return null;
    }

    /**根据Key和column从缓存读取数据,包括timestamp.
     * @param aKeyArea Key
     * @param aName column
     *
     * @return Map<String, Object> 缓存数据
     *         key:"cache.timestamp", value:存放缓存数据时的timestamp
     *         key:"cache.value", value:缓存对象
     */
    public Map<String, Object> getResultMap(String aKeyArea, String aName)
    {
        Map<String, Object> resultMap = new HashMap<String, Object>();
        CassandraClientPool pool = CassandraClientPoolFactory.INSTANCE.get();
        // 取得客户端(群集服务器)
        CassandraClient client = null;
        try
        {
            // 从群集服务器获得一个客户端
            client = pool.borrowClient(mCassandraClient);

            // Keyspace
            Keyspace keyspace =
                client.getKeyspace(mDefaultKeyspace);
            // ColumnPath
            ColumnPath columnPath = new ColumnPath(mDefaultColumnFamily);
            columnPath.setColumn(bytes(aName));

            // 从缓存读取
            Column col = keyspace.getColumn(aKeyArea, columnPath);

            byte[] objBytes = col.getValue();
            // 由微秒转换为毫秒
            long timestamp = col.getTimestamp()
                / CacheConstants.MICROSECONDS_PER_MILLISECONDS;

            // 从字节数组获取对象
            Object obj = ByteUtil.getObjectFromBytes(objBytes);

            // 缓存对象
            resultMap.put(CacheConstants.CACHE_MAP_KEY_VALUE, obj);

            // 存放缓存数据时的timestamp
            resultMap.put(CacheConstants.CACHE_MAP_KEY_TIMESTAMP, timestamp);

            // 为确保finally中能正确释放client,此处需重获取一次
            client = keyspace.getClient();

            // 用户的缓存数据
            return resultMap;
        }
        // Key或者Column不存在
        catch (NotFoundException e)
        {
            sLog.error(e);
        }
        catch (Exception e)
        {
            sLog.error("根据Key和column从缓存读取数据(包括timestamp)时出错。");
            sLog.error(e);
        }
        finally
        {
            // finally中释放client
            releaseClient(pool, client);
        }
        return null;
    }
分享到:
评论

相关推荐

    apache-cassandra-0.5.1-src.tar.gz

    4. **测试代码**:如`test`目录,用于验证Cassandra的功能和性能,通过这些测试,开发者可以了解如何正确使用Cassandra API。 在0.5.1版本中,Cassandra可能引入了以下特性: - **更好的一致性模型**:Cassandra...

    libQtCassandra:具有Qt Framework的Apache Cassandra的C ++库-开源

    这个库的主要目的是简化Cassandra API的使用,通过提供与Qt语法兼容的API,使得在Qt应用中操作Cassandra数据库变得更加直观和高效。 首先,让我们深入了解`libQtCassandra`的核心特性: 1. **Qt集成**:此库是专门...

    开源依赖第二部分,Cassandra工程所需要的开源项目的所有依赖

    Cassandra可能利用它来处理内部的数据对象。 这些开源项目共同构成了Cassandra开发环境的基础,它们为Cassandra提供了核心功能、网络通信、配置管理、解析处理等能力。了解这些依赖可以帮助开发者更好地理解和维护...

    datastax-cassandra

    1. **起源与设计理念**:Cassandra最初由Facebook开发,用于管理其内部的 inbox 搜索功能。后来成为Apache顶级项目,受到了Google Bigtable和Amazon Dynamo的启发,采用了一种分片和复制的架构,旨在提供线性可扩展...

    C# 利用Thrift 快速读写Cassandra数据库

    在Cassandra中,Thrift提供了一组API,用于在Cassandra节点间传递数据和管理请求。 2. **C#与Thrift集成**: 要在C#中使用Thrift,首先需要安装Apache.Cassandra库,这个库包含了Cassandra的Thrift绑定。开发者...

    cassandra介绍

    Cassandra 使用 Memtable 和 SSTable 来存储数据。当写入操作发生时,首先会在 CommitLog 中记录,随后数据会被写入到对应的 Memtable 中。Memtable 是一种按 key 排序的内存结构,当其达到一定大小后,会被刷新到...

    cpp-KairosDB是基于Cassandra存储的快速时间序列数据库

    在开发方面,KairosDB提供了Java API以及RESTful接口,使得集成到各种应用程序中变得简单。无论是C/C++应用程序还是其他语言编写的应用,都可以通过这些接口与KairosDB交互,进行数据的读取和写入。对于C/C++开发者...

    Cassandra与HBase系统架构比对

    - **数据模型**:Cassandra 使用列族(Column Family)作为基本的数据组织单位,每个列族内部包含多个列,每列由名称、值和时间戳组成。此外,Cassandra 还支持标准列族和超级列族两种数据模型。 - **系统架构**:...

    cassandra Example的一点理解及疑问

    2. 使用Cassandra API进行数据操作:插入、查询、更新和删除。 3. 集群管理和运维工具:如nodetool的使用、故障排查。 4. 分析Cassandra源码,理解其内部工作机制。 5. 特定版本(Cassandra 6.0)的新特性、改进和...

    Python-pycassaCassandra的PythonThrift驱动

    总之,`pycassa` 作为 Python 社区广泛使用的 Cassandra 驱动,提供了简洁、高效的接口,使得开发人员能轻松地在 Python 应用中集成 Cassandra,处理大规模的数据存储和检索需求。通过学习和使用 `pycassa`,开发者...

    Apache Cassandra存储系统 v4.1.1 GA.gz

    源码源代码:在Cassandra的源代码中,你可以深入理解其内部工作原理,包括数据分布、一致性算法(如Gossip协议)、读写流程、数据模型(宽列存储)以及索引管理等。通过阅读源码,开发者可以自定义模块,优化性能,...

    API网关Kong实战(水印).pdf

    Kong是一个高可用、易扩展的API网关项目,其核心基于OpenResty构建,利用了Nginx的高性能和Lua语言的灵活性。Kong的设计允许它轻松应对大量网络请求,并且可以水平扩展,实现多个Kong服务器的集群部署。它通过负载...

    Spring-framework-4.3

    对于Spring框架来说,Javadoc-API文档是开发者理解框架内部工作原理、查找API使用方法的必备资源。Spring-framework-4.3的Javadoc-API文档,详尽地记录了该版本中所有公开的类和接口,以及它们的使用方式,使得...

    kong-master_made_API_

    Kong是云原生的API网关,它在API管理和微服务架构中扮演着核心角色。云原生意味着Kong设计时考虑了分布式、容器化和动态编排的环境,能够轻松适应现代云基础设施的需求。本压缩包文件"Kong-master"可能包含的是Kong...

    cassandraChat:聊天网络应用程序以学习Cassandra

    【标题解析】 ...通过参与cassandraChat项目,开发者不仅可以提升JavaScript编程技能,还能深入理解Cassandra数据库的内部运作,对于想要涉足大数据处理和分布式系统的开发者来说,是一个极好的实践平台。

    flink-1.8.1-src.tgz

    通过对 `flink-1.8.1-src.tgz` 的源码学习,开发者可以深入了解 Flink 的内部工作机制,更好地利用其特性来构建高效、可靠的实时数据处理系统。同时,源码研究也是深入理解分布式计算原理和实践的好途径。

    SpringBoot 源码解析——源码模块功能分析.docx

    SpringBoot 源码解析是指对 SpringBoot 框架的源码进行深入分析和研究,以了解框架的内部机制和工作原理。源码模块是 SpringBoot 框架的核心组成部分,它们之间的交互和协作是 SpringBoot 框架能够正常工作的基础。 ...

    PGConf.CN2019大会资料 培训PPT--4-李章梅--HugeGraph图数据库介绍及使用PostgreSQL作为后端存储

    - **Internal API Layer**:提供内部API接口,包括Schema管理、图操作、索引等功能。 - **Graph Engine**:执行具体的图计算任务。 - **Backend Storage Interface**:后端存储接口,用于与不同的存储系统交互。 - *...

    kong-api-composition

    7. **数据库集成**:Kong 默认使用 Cassandra 或 PostgreSQL 作为其数据存储。了解这两种数据库的使用和配置对管理 Kong 的服务和插件配置至关重要。 8. **性能优化**:Lua 脚本的执行效率直接影响 Kong 的整体性能...

Global site tag (gtag.js) - Google Analytics