Cassandra 返回数值的无序结果集

2024-03-22

我是 No SQL 新手,刚刚开始学习 Cassandra,我有以下问题要问。我创建了一个包含一列的简单表来了解 Cassandra 分区和集群,并尝试在插入后查询所有值。

我的表结构

create table if not exists music_library(custno int,  primary key(custno))

我按顺序插入了以下值

insert into music_library(custno) values (11) 
insert into music_library(custno) values (12) 
insert into music_library(custno) values (13) 
insert into music_library(custno) values (14) 

然后我正在查询这张表

select * from music_library

它按以下顺序返回值

13
11
14
12

但我在期待

11
12
13
14

为什么它会有这样的行为?


我运行了你的确切陈述并产生了相同的结果。但我还调整了您的查询来运行token函数,这就是它产生的结果:

aaron@cqlsh:stackoverflow> select custno,token(custno) from music_library;

 custno | system.token(custno)
--------+----------------------
     13 | -5034495173465742853
     11 | -4156302194539278891
     14 |  4279681877540623768
     12 |  8582886034424406875

(4 rows)

为什么它会有这样的行为?

简而言之,因为 Cassandra 无法按分区键的值对结果进行排序。

由于您的表有一个主键custno,您的行按哈希标记值进行分区custno,并写入负责这些令牌范围的节点。当您在 Cassandra 中运行未绑定查询时(没有WHERE子句),结果按其分区键的哈希标记值排序返回。

Using ORDER BY在这里也行不通。ORDER BY只能对数据进行排序within一个分区,甚至仅在集群键上。为了得到custno要正确排序值,您将需要找到一个新的分区键,然后指定custno作为升序方向的聚类键。

编辑20190916-后续澄清

所有列都会发生这种标记化吗?

不会。分区键被散列到令牌中以确定它们在集群中的位置(它们被写入哪个节点)。写入各个列值within一个分区。

我如何将插入的号码与订单一起退回?

您无法在不更改模型的情况下更改此表的顺序。简而言之,您必须找到一种方法来将您期望返回的值(与查询一起)组织在一起(找到另一个分区键)。具体看起来如何取决于您的业务/查询需求。

例如,假设我想跟踪哪些客户购买了特定的音乐专辑。我可能会创建一个如下所示的表:

CREATE TABLE customers_by_album (
  album TEXT,
  band TEXT,
  custno INT,
  PRIMARY KEY (album,custno))
WITH CLUSTERING ORDER BY (custno ASC);

插入一些数据后,以下查询返回按以下顺序排序的结果custno:

aaron@cqlsh:stackoverflow> SELECT album,token(album),band,custno FROM
    customers_by_album WHERE album='Moving Pictures';

 album           | system.token(album) | band | custno
-----------------+---------------------+------+--------
 Moving Pictures | 7819329704333693835 | Rush |     11
 Moving Pictures | 7819329704333693835 | Rush |     12
 Moving Pictures | 7819329704333693835 | Rush |     13
 Moving Pictures | 7819329704333693835 | Rush |     14

(4 rows)

这是可行的,因为我正在按分区查询数据(album),然后我“聚类”custno它利用磁盘上的排序顺序。这也是数据写入磁盘的顺序,因此 Cassandra 只是按顺序从分区读取数据。

几年前我为 DataStax 写了一篇关于这个主题的文章,它仍然非常相关。如果有机会请读一读:https://www.datastax.com/dev/blog/we-shall-have-order https://www.datastax.com/dev/blog/we-shall-have-order

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

Cassandra 返回数值的无序结果集 的相关文章

随机推荐

  • 检查一个名字是否看起来“人类”?

    我有一款在线角色扮演游戏 我正在认真对待 最近 我遇到了用户使用虚假名称 只是一堆不同字母 制作虚假字符的问题 就像 Ghytjrhfsdjfnsdms Yiiiedawdmnwe Hhhhhhhhhhejejekk 我强迫他们改名 但这已
  • 使用“json.dumps”时 JSON 对象中的项目乱序?

    我在用着json dumps转换成json就像 countries append id row id name row name timezone row timezone print json dumps countries 我得到的结果
  • 禁用 EclipseLink 缓存

    在我的应用程序中 当用户登录系统时 系统从数据库读取一些设置并将它们存储在用户的会话中 系统使用 EclipseLink JPA 2 0 通过 JPA 查询执行此操作 当我更改数据库中的某些设置并再次登录时 查询将返回以前的结果 Eclip
  • 定期调用 Android 服务 [GoodApporach?]

    我的要求是 Android 应用程序必须每隔一小时 可配置 向服务器发送用户位置详细信息 纬度和经度 我遵循的方法是使用警报管理器 我以配置的时间间隔调用我的服务 无论应用程序是否正在运行 该服务都会将位置详细信息发送到服务器 这是一个好方
  • URLWithString 对于资源路径返回 nil - iphone

    由于某种原因获取资源的 URL 时出现问题 此代码位于 viewDidLoad 中 并且可以在其他应用程序中使用 但由于某种原因不能在此处使用 NSString audioString NSBundle mainBundle pathFor
  • 升级到 Xcode 5.0.2:xib 警告。属性不可用

    我最近升级到了 xcode 5 0 2 现在 当我构建 Cocoa 应用程序时 我收到此警告 属性不可用 在 10 8 之前的 Mac OS X 版本上使用当前宽度作为最大布局宽度 我尝试找到 最大布局宽度 但无法找到 我该如何摆脱这个警告
  • ES6的导出和花括号

    我看到聊天频道中发布了一段代码 他的代码的最后是 export UserInformation 有些团体表示语法错误 有人说只要变量存在就可以 那么哪一组是正确的呢 我也是第一次见到这种语法 我在导出时从未见过花括号 我只在导入时使用过它们
  • 使用 PHP 测试 FTP 连接

    我正在使用下面的 PHP 脚本来测试 FTP 连接 目前 如果连接成功 它正在打印文件数组 如果能够连接 如何让它也显示消息 就像 连接成功 一样 con ftp connect server or die Couldn t connect
  • 如何将 facebook 测试页面订阅到 facebook apps webhook

    我正在创建聊天机器人并想在 Facebook 上建立联系 我想在我的页面中测试我的信使聊天机器人 但我必须首先进行应用程序审查和业务验证 但我不想这样做 因为我刚刚开发了我的聊天机器人 或者你可以说这是暂存环境 I found that w
  • Python:将参数传递给 threading.Thread 实例的正确方法是什么

    我扩展了 threading Thread 我的想法是做这样的事情 class StateManager threading Thread def run self lock state while True lock acquire se
  • 如何用 Canvas 绘制曲线动画?

    我有很多点想慢慢画出来 我尝试 setTimeOut 以及由此产生的效果tutorial http www html5canvastutorials com advanced html5 canvas linear motion anima
  • 如何从 MySQL 检索 JSON 数据?

    我有下表及其关系 我将 JSON 数据存储在 client services 表中 他们有什么方法可以使用 MySQL 查询检索 JSON 值 如下所示 SELECT getJson quota as quota client id FRO
  • 在 tkinter 文件对话框中指定文件路径

    我有一个文件对话框来打开文件 但是 我要打开的文件与我编写的程序位于不同的目录中 文件对话框打开到我所在的目录 有没有办法指定文件对话框打开的位置 这是相关代码 root Tk root fileName tkFileDialog asko
  • 调整通话状态栏的大小?

    如何根据笔尖上的通话状态栏调整视图大小 我认为它只是设置调整大小属性 但它们没有为根 UIView 启用 我认为我的主要问题是我不知道这一切叫什么 除了谈论模拟器菜单命令之外 我在任何文档中都找不到对通话中状态栏的任何引用 iOS 将调用你
  • Kendo Grid:如何在一个单元格中显示 List

    我尝试迭代列表并将所有元素显示到列中的单元格中 但我无法使其正常工作 这是我到目前为止所拥有的 在网格定义中 columns Bound x gt x locationList Title Locations Included Client
  • 在 Windows 上运行 libxlsxwriter

    我正在尝试使用libxlsxwriter 但我似乎可以让事情正确编译或运行 我按照 Windows 的说明使用Mingw w64 and msys2可以在这里找到 http libxlsxwriter github io getting s
  • 减少小程序加载时间

    我有一个 html 文件 其中包含一个作为小程序的 jar 文件 当我打开 html 文件时 加载小程序的时间太多了 有什么方法可以减少加载时间吗 这里有三个主要因素在起作用 1 Java 启动时间 冷启动过去需要 5 10 秒 但是随着J
  • 如何修复 Mavericks 上 Gemfile 中的 libv8 错误?

    当我跑步时bundle install I get An error occurred while installing libv8 3 11 8 17 and Bundler cannot continue Make sure that
  • 在准备好的语句中使用 COLLECT() 时,为什么会收到“ORA-00932:不一致的数据类型:预期 - 得到 -”?

    我将此查询与Perl DBI https metacpan org module DBI SELECT c change id COLLECT t tag AS the tags FROM changes c LEFT JOIN tags
  • Cassandra 返回数值的无序结果集

    我是 No SQL 新手 刚刚开始学习 Cassandra 我有以下问题要问 我创建了一个包含一列的简单表来了解 Cassandra 分区和集群 并尝试在插入后查询所有值 我的表结构 create table if not exists m