使用 CQL 3.0 在集合上创建自定义索引

2023-12-20

我一直在关注CQL 3.0数据建模文档 http://www.datastax.com/documentation/cql/3.0/webhelp/cql/ddl/ddl_anatomy_table_c.html#concept_ds_qqw_1dy_zj它描述了带有标签的歌曲列系列,创建如下:

CREATE TABLE songs (
    id uuid PRIMARY KEY,
    title text,
    tags set<text>
);

我想获取具有特定标签的所有歌曲的列表,因此我需要添加适当的索引。

我可以创建一个索引title列很容易,但是如果我尝试索引tags列是一个集合,如下所示:

CREATE INDEX ON songs ( tags );

我从 DataStax Java 驱动程序 1.0.4 收到以下错误:

Exception in thread "main" com.datastax.driver.core.exceptions.InvalidQueryException: Indexes on collections are no yet supported
at com.datastax.driver.core.exceptions.InvalidQueryException.copy(InvalidQueryException.java:35)
at com.datastax.driver.core.ResultSetFuture.extractCauseFromExecutionException(ResultSetFuture.java:269)

根据 JIRA 问题,这似乎可能在 Cassandra (2.1) 的更高版本中得到修复卡桑德拉-4511 https://issues.apache.org/jira/browse/CASSANDRA-4511。不过,我目前正在使用 Apache Cassandra 1.2.11,并且还不想升级。根据问题卡桑德拉-5615 https://issues.apache.org/jira/browse/CASSANDRA-5615不过,在 Cassandra 1.2.6 中is支持自定义索引关于收藏。

问题是,唯一文档 http://www.datastax.com/documentation/cql/3.1/webhelp/cql/cql_reference/create_index_r.html可用状态:

Cassandra 支持创建自定义索引,该索引仅供内部使用,超出了本文档的范围。

But, it does建议使用以下语法:

CREATE CUSTOM INDEX ON songs ( tags ) USING 'class_name';

是什么class_name此 CQL 语句中指定了哪些内容?

有没有更好的方法来索引标签,以便我可以查询songs具有特定标签的歌曲列表的表?


在我看来,您尝试执行此操作的方式并不是在 Cassandra 中对其进行建模的最佳方式。您根据查询而不是数据构建模型。如果您需要根据标签查找歌曲,那么您可以为此创建另一个表并复制数据。就像是 ...

CREATE TABLE tagged_songs (
  tag varchar,
  song_id uuid,
  song_title varchar,
  ... anything else you might need with your songs here ...
  PRIMARY KEY ((tag), song_id)
);

Cassandra 的前提是存储成本低廉。复制您的数据以满足您的查询。写入速度很快,相同的数据写入 3、4、10 次通常就可以了。

您还希望将歌曲标题和所需的任何其他信息存储到此表中。您不想在阅读时获取大量 ID 并尝试加入它。这不是关系数据库。

当有人为歌曲添加标签时,您可能希望将标签插入到现有的集合中,并将其也添加到 tagged_songs 表中。查询带有标签 X 的所有歌曲基本上是 O(1)。

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

使用 CQL 3.0 在集合上创建自定义索引 的相关文章

随机推荐

  • 如何在 Go 中执行文字 *int64 ?

    我有一个结构类型 int64 field type SomeType struct SomeField int64 在我的代码中的某个时刻 我想声明这个的文字 比如说 当我知道该值应该是 0 或指向 0 时 你知道我的意思 instance
  • Universal Analytics 和 Facebook 注册

    我有一个允许通过 Facebook 注册的网站 theneeds com 我们正在开展多项活动 例如在 Facebook 本身上 我们希望正确跟踪不同活动的注册情况 问题出在 Universal Analytics 上 当用户注册 Face
  • 更改 Git 历史记录中的电子邮件地址

    我已经在 git 存储库上工作了一段时间并做了一些提交 我一直在我的 php 文件中使用文档块 包括我的私人电子邮件地址 如下所示 Bla bla bla author Nic lt email protected cdn cgi l em
  • 退出世博会

    我必须从我的 React Native 项目中退出 但我仍然想保留他们的库提供的一些功能 例如通知 是否可以 提前致谢 从 开始SDK33博览会改为根据需要单独安装自己的模块 如果您已经安装并使用了notification模块使用expo
  • Flutter,in_app_purchase 非常难以测试

    在查看了有点差劲的 in app purchase pub dev 文档后 在多次分发测试版本后 我成功地将内部测试 url 发送到测试设备进行下载 然而 当我使用真实设备进入 in app purchase 屏幕时 就会出现应用程序终止对
  • 在通用 lambda 捕获中使用 this 指针

    我有一个问题 Clang 3 6 和 G 5 1 有不同的意见 include
  • Linux环境下的C#

    我目前在 Unix 环境中使用 C C 工作 并且是 Linux 环境的新手 我想了解 Linux 操作系统并学习 C 作为我职业生涯的下一个级别的编程语言 我决定在我的笔记本电脑上安装 Ubuntu Linux 但我不确定我们是否可以在L
  • 如何使用JS检测用户与phonegap的触摸

    我正在使用phonegap 来构建Android 应用程序 我想检测用户的触摸事件 以便弹出警报 但是 如何从 javascript 调用 ontouch 事件呢 Thanks 下面是一个示例 显示touchstart and touche
  • kaptGenerateStubsDebugKotlin FAILED e:无法加载模块 <错误模块> - Android Studio 项目

    当我尝试构建项目时出现此错误 我的编译器没有任何错误 源代码 https github com KarolCieslar WyjazdyOSP tree firebase https github com KarolCieslar Wyja
  • .NET 4.5 中 List.Sort 的行为与 .NET 4.0 相比有何变化?

    我在针对 NET 4 0 的项目中进行了以下测试 TestFixture public class Donkey Test public void TestListSorting var expected new MockRepositor
  • 使用 webpack 导入 vis.js

    我想进口only DataSet and Network from vis js在我们的 Webpack 应用程序中使用 ES6 模块 一种简单的方法就是导入dist vis network min js但它已经缩小了 所以与我们的 web
  • JavaScript解析字符串和对象的引用[重复]

    这个问题在这里已经有答案了 是否可以通过对象本身获取对象的引用 obj 以及字符串形式的属性 地址 城镇 街道 所以最后它解决了 obj 地址 城镇 街道 我可以想象 eval 函数 Try function getValue obj pa
  • Echo 将我的制表符更改为空格

    我将来自网络的以下结构作为如何在 BASH 中读取文件的基本示例 cat inputfile txt while read line do echo line done 不过 我的 inputfile txt 是制表符分隔的 并且上述命令中
  • 何时索引、在 Mongoid 中索引什么?

    我对索引有点陌生 但我对索引的用例很好奇 我认为它使对索引字段的查询速度更快 是否有确定索引内容和何时索引的标准 我应该期望获得什么样的性能优势 特别是在 Rails 应用程序上将 Mongoid 与 MongoDb 结合使用 查看Inde
  • 如何停止 goroutine [重复]

    这个问题在这里已经有答案了 我有一个调用函数的 goroutine 并且有一个特殊参数 我想启动或停止这个 goroutine 我的问题是这段代码永远不会停止我的 goroutine 它每次都会创建一个新作业 quit make chan
  • TextView Marquee 不起作用[重复]

    这个问题在这里已经有答案了 我尝试过使用选框但不起作用 这是我的代码 请让我知道哪里出了问题
  • 单击标记时,Google 地图 v3 打开最后一个信息窗口

    我有一个共享的infoWindow对于我所有的标记 如果我使用 jquery 的话效果很好 each function 但是如果我将其更改为 JavaScrips 的本机 for 或 while 循环 则它不会按预期工作 每当我单击一个标记
  • 为什么它返回一个随机值而不是我给函数的值?

    在C程序中 有一个交换函数 该函数采用一个名为x的参数 我希望它通过更改主函数内交换函数中的x值来返回它 当我将参数视为变量时 我想要它 但是当我直接为参数设置整数值时 程序会产生随机输出 include
  • 与 Nodejs Express 共享 Laravel 4 会话

    我正在尝试从 NodeJS 上标头的 Cookie 中获取 Laravel 会话 ID 到目前为止我已经尝试过 function nodeDecrypt data key iv var decipher crypto createDecip
  • 使用 CQL 3.0 在集合上创建自定义索引

    我一直在关注CQL 3 0数据建模文档 http www datastax com documentation cql 3 0 webhelp cql ddl ddl anatomy table c html concept ds qqw