反转Cassandra索引

NoSQL选型本质:从业务读写模式匹配数据模型 NoSQL并非关系型数据库的简单替代,而是基于文档、宽列、键值、搜索四种核心数据模型,对现实业务约束进行结构性解耦的技术范式。其底层原理在于存储结构与查询路径的强绑定——MongoDB的BSON序列化决定IO效率,Cassandra的分区键定义物理磁盘布局,Redis的数据结构即API契约,Elasticsearch的倒排索引重构检索逻辑。这种模型驱动的设计,使NoSQL在高并发、海量时序、亚秒级搜索等场景具备不可替代的技术价值。典型应用场景包括实时风控(Redis)、设备监控(Cassandra)、内容管 阅读详情

问题

通过前面的文章:《谈谈Cassandra的客户端》和《大话Cassandra数据模型》我们已经了解了Cassandra的数据模型和编程接口的情况。

假如我们在实际的应用中我们的数据是这样保存的:

image

每一个key对应了一些列的Column:port,Version,Service,Status等等。

通过某一个key,我们能够找到和这个key相关的所有Column的值。

假设我们要找到Column的name为Service,并且Column的值为app2的所有的Key值,那么我们应该如何操作呢?

根据Cassandra提供的Thrift API,我们并不能够直接找到这样的数据,唯一可以操作的方式就是通过KeyRange的方式:进行全表扫描,找到符合条件的值。

这种方式虽然可以解决问题,但是当数据量非常巨大的时候,进行这种查询的效率还是非常有限的。

解决

我们可以考虑使用反转索引的办法来解决这类的查询问题。

在原先数据模型的基础之上,我们根据实际的查询需求,建立以下额外的数据

image

我们建立key为Service=app2,然后对应的值为key2。

这样,当我们需要查询所有的Column的name为Service,并且Column的值为app2的所有的Key值时候,我们可以直接将Service=app2作为key传给Cassandra,然后就可以获得所有相应的key了。

当我们想知道这样的key中其他的Column值的时候,只要根据上一步找到的key,再次执行查询即可。

同样,我们想知道有Column的name为Service1的所有Key值时候,我们可以直接将Service1作为key传给Cassandra,然后就可以获得所有相应的key了。

这种方案的局限在于,如果需要索引的值越多,需要的额外空间就越大,同时当被索引的值进行修改的时候,索引的值也要同步进行修改。

还有一种方式。可以考虑使用Lucandra。在这篇文章中就不详细介绍了。

大数据平台架构与原型实现-读书笔记9 第九章数据存储 在大数据生态圈里,数据存储可分为两大类:一类是直接以文件形式存放在分布式文件系统上,处理工具可直接读写(Hive和SparkSQL);另一类通过NoSQL数据库来存储和管理数据。 一、批处理的数据存储\ 无论为Hive还是SparkSQL,它们的数据库和数据表都是直接映射到HDFS的目录上,所有批处理的存储规划实际就是对HDFS存储空间的规划。批处理的主要工作内容是构建数据仓库。 1.1CSV格式 CSV是最为常见的文件格式,大多数... 阅读详情

相关推荐

阿里面试官:蓝桥杯javab组,附超全教程文档

JAVA基础 JAVA异常分类及处理 异常分类 异常的处理方式 Throw和throws的区别 JAVA反射 动态语言 反射机制概念 (运行状态中知道类所有的属性和方法) Java反射API 反射使用步骤(获取Class对象、调用对象方法) 获取Class对象的3种方法 创建对象的两种方法 JAVA注解 JAVA内部类 JAVA泛型 JAVA序列化(创建可复用的Java对象) JAVA复制 JAVA集合 接口继承关系和实现 List ArrayList(数组) Vector(数组实现、线程同步) Li

m0_56222134的博客 472

Cassandra部分参数调优

优化一:commitlog文件 由于客户端写数据时需要阻塞写commitlog(默认64GB),所以可以把commitlog放在SSD或者较为空闲的盘中。执行一次刷操作成功后,commitlog文件将被删除。 commitlog_directory 优化二:data文件 最好把data文件和commitlog放在两个不同的硬盘中,确保data不会和commitlog争抢IO时间。可配...

真一居士的博客 3034

Java开发教程!java手册中文版

JAVA基础 JAVA异常分类及处理 异常分类 异常的处理方式 Throw和throws的区别 JAVA反射 动态语言 反射机制概念 (运行状态中知道类所有的属性和方法) Java反射API 反射使用步骤(获取Class对象、调用对象方法) 获取Class对象的3种方法 创建对象的两种方法 JAVA注解 JAVA内部类 JAVA泛型 JAVA序列化(创建可复用的Java对象) JAVA复制 JAVA集合 接口继承关系和实现 List ArrayList(数组) Vector(数组实现、线程同步) Li

m0_57066056的博客 1905

Cassandra Secondary Index 介绍

摘要 本文主要介绍cassandra中的索引,物化视图,有些知识点需要对cassandra有基本的认识才能理解。比如数据在cassandra节点中如何分布。如果有不明白的地方可以看本专栏之前文章。或者发送邮件和我探讨 cnstonefang@gmail.com。 为什么叫secondary index CREATE TABLE user( id bigint,...

weixin_30300523的博客 385

555时基芯片的5种经典电路设计:从方波发生器到PWM调光实战

本文深入解析了555时基芯片的5种经典电路设计,从基础的无稳态方波发生器、单稳态触发器,到实用的占空比可调PWM信号源,并重点介绍了如何引入TVS保护电路增强系统鲁棒性。最后通过一个带保护的PWM LED调光台灯实战项目,综合展示了信号生成、功率驱动与电路保护的核心技术,是电子爱好者掌握模拟电路设计与应用的绝佳指南。

weixin_29207439的博客 491

macOS Jdk1.8安装(目前主流版本的jdk)

添加环境环境变量,类似于windows的高级设置中path配置的环境变量。查看 JAVA_HOME 目录。查看 JDK 版本信息。一直下一步安装就好了。在终端的根目录下运行。

m0_50207524的博客 9353

Cassandra介绍(二)

在 Cassandra 中,数据都是以 Key-value 的形式保存的。KeysIndex 所创建的二级索引也被保存在一张 ColumnFamily 中。在插入数据时,对需要进行索引的value进行摘要,生成独一无二的key,将其作为RowKey保存在索引的ColumnFamily中;同时在 RowKey 上添加一个 Column,将插入数据的 RowKey 作为 name 域的值,value 域则赋空值,timestamp 域则赋为插入数据的时间戳。

qq_45309297的博客 675

反激开关电源设计全解析:从CCM/DCM原理到PCB布局实战

开关电源作为现代电子设备的能量转换核心,其核心原理是通过高频开关动作实现高效的电能变换。反激拓扑因其结构简单、成本低廉且易于实现电气隔离,成为小功率离线式电源的主流选择。其技术价值在于通过变压器耦合实现能量存储与传递,解决了安全隔离与多路输出等关键需求,广泛应用于充电器、适配器及家电供电等场景。本文聚焦反激电路,深入剖析其CCM与DCM两种工作模式的原理差异及选型考量,并结合伏秒平衡定律与RCD钳位等热词,详解从变压器计算到MOSFET选型的完整工程设计流程。

weixin_31951365的博客 343

解剖Cassandra 【3】Index and Search

1。Primary Index 假设我们有这么一个 ColumnFamily, 它是一个地址本,包含 5 行记录,例子如下。 AddressBook = { // 这是一个 ColumnFamily,每一行包含 4 个 columns。   "John":{ //第一行数据的 Row-key。             {name: "street", value: "Howar

tycoon的专栏 667

【人工智能】Claude Code 安装、配置及问题排查完整指南

建议使用IDE来启动 Claude,执行后,内容如下。(确保环境可正常运行 npm 命令)。

奶爸的编程之路,也就一周冷个三天 1207

一文读懂 CST 时/频域求解器

本文系统介绍了CST Studio Suite中的关键网格技术——六面体网格、四面体网格以及TLM求解器专用的八叉树非均匀网格技术。重点阐述了六面体网格的三项核心技术:理想边界拟合(PBA)技术可精确处理曲面边界,薄片技术(TST)能高效模拟薄层结构,自适应八叉树网格实现计算资源最优分配。同时详细对比了六面体网格与四面体网格的特点及适用场景,前者适用于系统级EMC/EMI分析等时域问题,后者擅长处理复杂曲面和异质材料的频域问题。

一只豌豆象的博客 464

Cassandra基本操作(键空间、表、索引)

1 操作键空间1.1 创建Keyspace登录后复制 语法 CREATE KEYSPACE <identifier> WITH <properties>; 更具体的语法: Create keyspace KeyspaceName with replicaton={'class':strategy ...

weixin_29278805的博客 445

Simulink仿真状态空间中状态变量时域响应

起因 今天老师留了一道关于状态空间变量响应的题,于是想用simulink仿真,一开始使用state-space模块,但是发现它只能输出y,没办法显示状态变量的变化情况。然而状态变量之间的关系都可以表示为一阶微分方程组,因此我们考虑在Simulink中搭建微分方程组来求解这个问题。 微分方程组 x1˙=x2x2˙=−4x1−5x2+1(1)\dot{x_1}=x_2\\ \dot{x_2}=-4x_...

ZYunfei的博客 7449

cql oracle,Cassandra CQL中的Where和Order By子句

Cassandra的PRIMARY KEY有两个部分:>分区键>群集密钥PRIMARY KEY(partitionKey1,clusteringKey1,clusteringKey2)要么PRIMARY KEY((partitionKey1,partitionKey2),clusteringKey1,clusteringKey2)分区键确定您的数据存储在哪个节点上.群集键确定分区键中数...

weixin_33971463的博客 682

热力学仿真软件:SimScale_(1).SimScale入门与基础操作

导航栏:位于页面顶部,包含项目管理、仿真设置、结果分析等主要功能。项目列表:展示用户创建的所有项目。工作区:用于进行具体的操作,如几何建模、网格划分、边界条件设置等。控制台:显示操作日志和仿真进度。网格划分是将几何模型离散化为一系列小单元的过程,这些单元用于求解热力学方程。SimScale提供了多种网格划分方法,包括结构化网格和非结构化网格。SimScale提供了丰富的API接口,用户可以通过编程语言进行二次开发,实现自动化仿真和结果分析。项目管理:创建、删除和管理项目。几何建模:创建、导入和修复几何模型。

kkchenjj的博客 1867

AI一键生成带货短视频:电商直播的未来

随着电子商务行业的快速发展,直播带货已成为一种极为有效的营销手段。然而,传统的人工直播方式存在诸多局限性,如人力成本高、主播培训周期长等问题。为了解决这些挑战,一种基于AI技术的一键生成带货视频解决方案应运而生——这就是“Anchor Crafter”。这项创新技术不仅能够自动创建高质量的带货视频,而且还能实现人物与商品之间的自然交互,极大地提升了用户体验。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 2204

Cassandra介绍

Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable。其主要功能比Dynomite(分布式的Key-Value存储系统)更丰富.Cassandra最初由Facebook开发,后转变成了开源项目。它是一个网络社交云计算方面理想的数据库。以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模...

xiajingsong的博客 256

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Cassandra-0.7.0-beta1中的新特性

前一阵子Cassandra-0.7.0-beta1发布了,今天把代码拿下来粗略浏览了一下,发现主要有以下几点变化: 1 数据模型中的Keyspace和ColumnFamily可以动态修改: 之前的版本中,如果想在Cassandra中修改Keyspace和ColumnFamily,必须先停掉Cassandra,然后修改配置文件,最后再重启Cassandra才能生效。 在现在的版本中,我们只...

weixin_34072159的博客 93

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Rowkey设计在Cassandra中至关重要,因为它影响数据的访问性能

行键用于确定数据存储的位置,如果设计得不合理,可能会导致数据分布不均,从而影响查询性能。记住,理想的行键设计往往涉及折衷,具体取决于应用的需求和系统的优化目标。通过合理设计行键和利用列族特性,Cassandra能高效地处理复杂的行键结构,确保数据查询的性能和可用性。: 行键应该具有良好的分布性,避免全表扫描,可以通过组合多个属性来创建复合行键,比如时间戳和唯一标识符。: 定期评估Cassandra集群的状态,包括负载均衡和数据分布情况,以便及时发现并解决可能的性能瓶颈。

[Blog][Domain] programb.blog.youkuaiyun.com 707

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

P8级大佬整理在Github上45K+star手册,Javaweb资料视频

synchronized和ReentrantLock的区别 ConcurrentHashMap并发 Java中用到的线程调度 进程调度算法 什么是CAS(比较并交换-乐观锁机制-锁自旋) 什么是 AQS(抽象的队列同步器) JVM 线程 JVM内存区域 JVM运行时内存 垃圾回收与算法 JAVA 四种引用类型 GC分代收集算法 VS 分区收集算法 GC垃圾收集器 JAVA IO/NIO JVM 类加载机制 Spring 原理 Spring 特点 轻量级 控制反转 面向切面 容器 框架集合 Spri.

m0_60229361的博客 490

技术选型实战指南:当大数据组件遇上真实业务场景

本文深入探讨了大数据组件(如Hadoop、Spark、HBase)在真实业务场景中的技术选型策略。通过对比分析实时处理引擎(Spark Streaming vs Flink)和海量存储方案(HBase vs Cassandra)的性能指标、成本效益及适用场景,提供了一套从业务需求到技术落地的完整决策框架,帮助企业避免常见的技术选型陷阱。

weixin_29170327的博客 602

大牛手把手教你!海归硕士面试3家大厂挂了2家

JAVA基础 JAVA异常分类及处理 异常分类 异常的处理方式 Throw和throws的区别 JAVA反射 动态语言 反射机制概念 (运行状态中知道类所有的属性和方法) Java反射API 反射使用步骤(获取Class对象、调用对象方法) 获取Class对象的3种方法 创建对象的两种方法 JAVA注解 JAVA内部类 JAVA泛型 JAVA序列化(创建可复用的Java对象) JAVA复制 JAVA集合 接口继承关系和实现 List ArrayList(数组) Vector(数组实现、线程同步) Li

m0_57983911的博客 151

一文详解:java开发安卓应用

JAVA基础 JAVA异常分类及处理 异常分类 异常的处理方式 Throw和throws的区别 JAVA反射 动态语言 反射机制概念 (运行状态中知道类所有的属性和方法) Java反射API 反射使用步骤(获取Class对象、调用对象方法) 获取Class对象的3种方法 创建对象的两种方法 JAVA注解 JAVA内部类 JAVA泛型 JAVA序列化(创建可复用的Java对象) JAVA复制 JAVA集合 接口继承关系和实现 List ArrayList(数组) Vector(数组实现、线程同步) Li

weixin_57485542的博客 2199

mysql倒序分页,90%的人看完都说好

JAVA基础 JAVA异常分类及处理 异常分类 异常的处理方式 Throw和throws的区别 JAVA反射 动态语言 反射机制概念 (运行状态中知道类所有的属性和方法) Java反射API 反射使用步骤(获取Class对象、调用对象方法) 获取Class对象的3种方法 创建对象的两种方法 JAVA注解 JAVA内部类 JAVA泛型 JAVA序列化(创建可复用的Java对象) JAVA复制 JAVA集合 接口继承关系和实现 List ArrayList(数组) Vector(数组实现、线程同步) Li

m0_57205780的博客 513
上一篇: 为什么在Cassandra版本0.6.1中不适合使用Binary Memtable的方式导入大量的数据。
下一篇: 介绍Cassandra中的压缩
gpcuster
博客等级 码龄21年 297粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值