了解 Cassandra 中单个分区的读取

2024-01-11

我有一个 3 节点设置,Node1 (172.30.56.60)、Node2 (172.30.56.61) 和 Node3 (172.30.56.62), 它具有100K的单个分区数据,分区由nodeip构成。
请查找 NodeIP 的令牌/分区值 - 172.30.56.60

cqlsh:qnapstat> SELECT token(nodeip) FROM nodedata WHERE nodeip = '172.30.56.60' LIMIT 5; 

 system.token(nodeip)
----------------------
   222567180698744628
   222567180698744628
   222567180698744628
   222567180698744628
   222567180698744628

根据下面提供的 ./nodetool 环值,“172.30.56.60”只会将数据返回到协调器,因为从 173960939250606057 到 239923324758894350 的值是由节点 172.30.56.60 处理的。注:这是我的理解

172.30.56.60  rack1       Up     Normal  32.72 MiB       100.00%             173960939250606057                          
172.30.56.62  rack1       Up     Normal  32.88 MiB       100.00%             239923324758894351                          
172.30.56.61  rack1       Up     Normal  32.84 MiB       100.00%             253117576269706963                          
172.30.56.60  rack1       Up     Normal  32.72 MiB       100.00%             273249439554531014                          
172.30.56.61  rack1       Up     Normal  32.84 MiB       100.00%             295635292275517104                          
172.30.56.62  rack1       Up     Normal  32.88 MiB       100.00%             301162927966816823                          

我在这里有两个问题,

1)当我尝试执行以下查询时,这是否意味着协调器(例如172.30.56.61)从172.30.56.60读取所有数据?

2)协调器收到所有100K条目后,是否会执行100K的聚合,如果是这样,它会将所有100K条目保留在172.30.56.61的内存中吗?

SELECT Max(readiops) FROM nodedata WHERE nodeip = '172.30.56.60';

有一个不错的工具叫做CQL追踪这可以帮助您理解并查看执行 SELECT 查询后的事件流程。

cqlsh> INSERT INTO test.nodedata (nodeip, readiops) VALUES (1, 10);
cqlsh> INSERT INTO test.nodedata (nodeip, readiops) VALUES (1, 20);
cqlsh> INSERT INTO test.nodedata (nodeip, readiops) VALUES (1, 30);
cqlsh> select * from test.nodedata ;

 nodeip | readiops   
--------+-----------
      1 |        10 
      1 |        20 
      1 |        30 

(3 rows)
cqlsh> SELECT MAX(readiops) FROM test.nodedata WHERE nodeip = 1;

 system.max(readiops)
-----------------------
                   30

(1 rows)

现在让我们设置cqlsh> TRACING ON并再次运行相同的查询。

cqlsh> TRACING ON
Now Tracing is enabled
cqlsh> SELECT MAX(readiops) FROM test.nodedata WHERE nodeip = 1;

 system.max(readiops)
----------------------
                   30

(1 rows)

Tracing session: 4d7bf970-eada-11e7-a79d-000000000003


 activity                                                                                                                                                        | timestamp                  | source       | source_elapsed
-----------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+--------------+----------------
                                                                                                                                              Execute CQL3 query | 2017-12-27 07:48:44.404000 | 172.16.0.128 |              0
                                                                                                        read_data: message received from /172.16.0.128 [shard 4] | 2017-12-27 07:48:44.385109 |  172.16.0.48 |              9
                                                                                       read_data handling is done, sending a response to /172.16.0.128 [shard 4] | 2017-12-27 07:48:44.385322 |  172.16.0.48 |            222
                                                                                                                                   Parsing a statement [shard 1] | 2017-12-27 07:48:44.404821 | 172.16.0.128 |             --
                                                                                                                                Processing a statement [shard 1] | 2017-12-27 07:48:44.404913 | 172.16.0.128 |             93
 Creating read executor for token 6292367497774912474 with all: {172.16.0.128, 172.16.0.48, 172.16.0.115} targets: {172.16.0.48} repair decision: NONE [shard 1] | 2017-12-27 07:48:44.404966 | 172.16.0.128 |            146
                                                                                                          read_data: sending a message to /172.16.0.48 [shard 1] | 2017-12-27 07:48:44.404972 | 172.16.0.128 |            152
                                                                                                             read_data: got response from /172.16.0.48 [shard 1] | 2017-12-27 07:48:44.405497 | 172.16.0.128 |            676
                                                                                                                  Done processing - preparing a result [shard 1] | 2017-12-27 07:48:44.405535 | 172.16.0.128 |            715
                                                                                                                                                Request complete | 2017-12-27 07:48:44.404722 | 172.16.0.128 |            722

至于你的问题:

  1. 协调器将查询传递给副本,如果RF = 1 or (RF > 1 and CL=ONE),那么它将收到来自 1 个副本的回复,但是如果 (RF > 1 and CL > 1),而不是需要接收来自多个副本的回复并比较答案,因此协调器端也完成了编排。 它实际完成的方式是向最快的副本发出数据请求(使用告密者),并向满足 CL 所需的其他副本发出摘要请求。 然后协调器需要对数据响应进行哈希处理并摘要请求并进行比较。 如果分区被散列到特定节点,它将驻留在该节点中(假设 RF=1),并且只能从该节点读取信息。

  2. 客户端随查询一起发送页面大小,因此回复本身会批量返回(默认=5000),可以从客户端设置。

我推荐看这个剪辑 Cassandra 阅读路径以获取更多详细信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解 Cassandra 中单个分区的读取 的相关文章

  • Datastax Cassandra OpsCenter 服务未在 Windows 7 上启动

    我是卡桑德拉的新手 我按照中提到的说明在 Windows 7 64 位上安装了 DataStax Cassandra 社区版DataStax 社区版 http www datastax com 2012 01 getting started
  • 引起原因:com.datastax.driver.core.exceptions.InvalidQueryException:日期长度应为 8 或 0 字节 (13)

    我正在尝试使用 spring data cassandra 插入数据 但是当我的应用程序使用 Spring Boot 版本是 1 5 3 运行时 我遇到了以下错误 我在spring data中添加了一个实现CrudResposity的自定义
  • Cassandra Pojo Sink Flink 中的动态表名称

    我是 Apache Flink 的新手 我正在使用 Pojo Sink 将数据加载到 Cassandra 中 现在 我在以下命令的帮助下指定表和键空间名称 Table注解 现在 我想在运行时动态传递表名称和键空间名称 以便可以将数据加载到用
  • Redis是如何实现高吞吐量和高性能的?

    我知道这是一个非常普遍的问题 但是 我想了解允许 Redis 或 MemCached Cassandra 等缓存 以惊人的性能极限工作的主要架构决策是什么 如何维持连接 连接是 TCP 还是 HTTP 我知道它完全是用C写的 内存是如何管理
  • 使用 TLS/SSL 保护 Cassandra 通信

    我们希望保护 Cassandra 免受中间人攻击 有没有办法配置 Cassandra 使客户端 服务器和服务器 服务器 复制 通信采用 SSL 加密 谢谢 简短的回答 不 对于客户端 服务器 节俭 151 https issues apac
  • 使用 Cassandra 进行单元版本控制

    我的应用程序使用 AbstractFactory 作为 DAO 层 因此一旦实现了 HBase DAO 系列 创建 Cassandra DAO 系列并从多个角度查看差异对我来说将是非常好的 不管怎样 试图做到这一点 我看到 Cassandr
  • 无法使用 datastax java 驱动程序通过 UDT 密钥从 cassandra 检索

    我正在尝试使用用户定义的类型作为分区键将对象存储在 cassandra 中 我正在使用 datastax java 驱动程序进行对象映射 虽然我能够插入到数据库中 但无法检索该对象 如果我更改分区键以使用非 udt 例如文本 我就能够保存和
  • Cassandra data stax 查询生成器更新

    我正在尝试编写一个简单的更新查询 更新表 set col1 val1 col2 val2 where col3 val3 您能否提供一个使用查询生成器 API 在 Cassandra 中编写简单 UPDATE 的示例 试试这个 v1 x Q
  • Cassandra CQL v3.0 和复合类型

    我正在浏览以下文档CQLv3 0 http www datastax com docs 1 1 references cql index 我们是否应该在更新中指定复合键并选择 a b 1 以防万一comparator or key vali
  • cassandra 中的突变是什么?

    cassandra 中的突变是什么 它在做什么 我没有找到任何有关它的完整信息 您可以回答或分享带有手册或说明的链接吗 谢谢 Mutation 是一个由 thrift 生成的类 定义在cassandra thrift文件 您可以在以下位置找
  • Cassandra - 选择而不复制

    假设我创建了一个键空间和表 CREATE KEYSPACE IF NOT EXISTS keyspace rep 0 WITH replication class SimpleStrategy replication factor 0 CR
  • Cassandra cqlsh - 如何显示时间戳列的微秒/毫秒?

    我正在插入带有时间戳列的 Cassandra 表 我的数据具有微秒精度 因此时间数据字符串如下所示 2015 02 16T18 00 03 234 00 00 但是 在 cqlsh 中 当我运行选择查询时 微秒数据不会显示 我只能看到精确到
  • Cassandra 中的数据分布

    我听说过 Cassandra 及其发行版 其实想知道数据在整个集群中是如何分布的现象 我的意思是 Cassandra 如何决定哪些节点拥有哪些数据 如果您了解 HashTable 数据结构以及 Hashtable 中如何进行哈希处理 那么这
  • Hector (Cassandra) 删除异常

    当我尝试删除时使用 hector cassandra 客户端 它会删除列 但将行键留在后面 有谁知道为什么 以及如何删除该行键 使用 Cassandra 时这是预期的 由于它通过写入逻辑删除来删除 因此数据仍然存在 直到下一次压缩 最终它会
  • Spark JSON 文本字段到 RDD

    我有一个 cassandra 表 其中有一个名为 snapshot 的文本类型字段 其中包含 JSON 对象 identifier timestamp snapshot 我了解到 为了能够使用 Spark 对该字段进行转换 我需要将该 RD
  • Elasticsearch 与 Cassandra 对比 Elasticsearch 与 Cassandra

    我正在学习 NoSQL 并正在寻找满足客户要求之一的不同选项 在提出这个问题之前我已经查阅了各种资源 一个对NoSQL知之甚少的人 我需要以更快的速度存储数据并读取数据 完全故障安全且易于扩展 能够搜索数据进行分析 我最终得到了一个简短的清
  • 不使用 CPU 时 Cassandra 超时

    我使用 Phantom DSL 和 Datastax Cassandra 驱动程序时遇到 Cassandra 超时 然而 Cassandra 似乎并没有超载 以下是我得到的异常 com datastax driver core except
  • Apache Cassandra 中的复合索引

    我正在尝试设置一个 cassandra 列族 其中一些列上有二级索引 在读回数据时我需要进行过滤 在我最初的测试中 当我一起使用多个索引时 速度会变慢 这是我当前的配置方式 通过 cassandra cli update column fa
  • 如何使用 cqlsh 将 Cassandra 连接到本地主机?

    我将 rpc port 设置为公共 IP 地址 现在我可以从外部服务器正常连接到 Cassandra 但是 我无法使用 cqlsh 从 Cassandra 服务器本身进行连接 我收到一个错误 即 Connection error Could
  • 卡桑德拉吃掉内存

    I have 卡桑德拉2 1并设置以下属性 MAX HEAP SIZE 5G HEAP NEWSIZE 800M memtable allocation type heap buffers top 实用程序显示 cassandra 占用了

随机推荐

  • Fortran函数解释

    我在 Fortran 中有这个函数 我正在尝试用 C 重新编码它 C C FUNCTION POLY C FUNCTION POLY N A X DIMENSION A N C POLY 0 L N DO 1 K 1 N POLY POLY
  • java.util.MissingResourceException:找不到基本名称消息的包,区域设置 en_US

    我是 JSF 的新手 正在尝试这段代码 这是我的 faces config xml
  • 如何动态更新Nifi中的variable.registry.properties?

    变量注册表属性是 Nifi 添加的一项功能 旨在促进软件开发生命周期 这意味着您可以在单独的开发环境中开发流程 并利用 nifi variable registry properties 属性中指定的自定义属性文件以及表达式语言来使用处理器
  • 如何对过滤后的 html 表求和?

    我有一个 HTML 表 我可以使用 jquery 过滤它 在表格的底部 我想要一个 总计 行 它将显示的所有值相加 总计 行中显示的总和应该是显示的所有行的总和 即不考虑隐藏行 我尝试添加一个条件 例如使求和取决于行的显示样式 但这没有成功
  • 为什么当 args 是序列时 subprocess.Popen 不起作用?

    当 args 参数作为序列给出时 我遇到了 subprocess Popen 问题 例如 import subprocess maildir home support Maildir 这有效 它打印 home support Maildir
  • 使用“optparse”模拟 Python 脚本的命令行参数?

    我想使用的 Python 脚本 称为snakefood http furius ca snakefood doc snakefood doc html 通常从命令行运行并采用命令行参数 例如 sfood path to my project
  • 如何指定 unicode 字符范围

    如何指定 Unicode 字符范围 空格 到 u00D7FF 我有一个正则表达式 例如r u0020 u00D7FF 并且它不会编译说这是一个糟糕的范围 我是 Unicode 正则表达式的新手 所以以前没有遇到过这个问题 有没有办法让这个编
  • swift 为 NSStream 创建字节缓冲区持有者

    in the Ray Wenderlich 套接字教程 http www raywenderlich com 3932 networking tutorial for ios how to create a socket based iph
  • Selenium 在 -browserSessionReuse 模式下启动新浏览器

    我正在尝试 browserSessionReuse Selenium 模式来加速我的测试 但我注意到了一个奇怪的行为 这种模式的目的是避免在测试之间浪费时间打开浏览器 这就是它的工作原理 但并非总是如此 如果我连续运行测试 它们就会在同一个
  • 禁用 VS 代码中的警告

    在此输入图像描述 https i stack imgur com KVDnO png 当我点击禁用 工作区 错误是 无法禁用扩展 ESLint 扩展 Node js 扩展包 依赖于此 还有什么其他方法可以消除反应本机错误 你需要定义 esl
  • ggplot 在函数中不起作用,以字符串形式传入变量名

    我有以下简单的功能 但它的 ggplot 命令不起作用 当从命令行给出该命令时 该命令可以正常工作 gt testfn lt function gdf first second library ggplot2 print ggplot gd
  • 包含 symfony2 的文件

    我正在使用 google Drive api 在 symfony2 中进行捆绑 我在 Utils 文件夹中有一个类 Authentication 它与 google 中的文件 我放入完全相同的文件夹中 进行交互 我想将这些文件包含在我的 A
  • 在 B 列中为 A 列中的相同值选择最小值 excel?

    我想得到例如第 1 列中相同值的第 2 列中的最小值或最大值 在我的示例中 我希望值 A 列 1 的列 2 的最大值为 18 而 B 的最大值为 27 我尝试过使用数组函数 但无法使其正常工作 敬请期待任何提示或解决方案 Example C
  • 如何从 web 应用程序运行量角器?

    我想运行一些量角器测试 针对 angularApp 为此 我创建了一个用户界面 提示用户输入脚本文件 然后我需要以某种方式让量角器启动并运行测试 我有哪些选择来实现这一目标 您可以将文件传递到后端 并保存它 然后后端像平常一样执行测试pro
  • 有没有办法在 IE 中获取边框半径和渐变背景?

    我想知道是否有任何使用 javascript 或其他方法让 IE 显示边框半径或渐变背景的解决方法 我在寻找在 IE9 中使用 渐变和边框半径 的修复时遇到了这个问题 是的 虽然您现在可以在 IE9 中同时使用两者 但遗憾的是您不能同时使用
  • 使用 Vector 的 SIMD 向量化 C# 代码运行速度比经典循环慢

    我看过几篇文章描述了如何Vector
  • 递归重命名对象键

    我有一个递归函数来重命名对象的键名称 但我无法弄清楚如何重命名其中 2 个键 问题键是对象 我认为问题在于我正在检查对象类型 但此时如何重命名密钥 实际的数组非常大 但下面是一个缩小版本 任何帮助表示赞赏 var keys short ch
  • 表单中的两种方式数据绑定不起作用 Angular 2

    我有这个表单组件 它将作为输入User目的 我想使用该对象进行双向数据绑定 但它不起作用 有什么想法问题出在哪里吗 PS 问题似乎来自于输入参数的复制 如果我传递原始文件 它可以正常工作 但如果我传递副本 则两种方式的数据绑定将不起作用 我
  • 如何将日志消息从多处理模块路由到文件?

    In the Python 文档我发现记录消息 http docs python org library multiprocessing html logging在使用多处理模块生成不同进程的 python 脚本中是可能的 import m
  • 了解 Cassandra 中单个分区的读取

    我有一个 3 节点设置 Node1 172 30 56 60 Node2 172 30 56 61 和 Node3 172 30 56 62 它具有100K的单个分区数据 分区由nodeip构成 请查找 NodeIP 的令牌 分区值 172