在 DSE 中何时使用 Cassandra 与 Solr?

2024-04-05

我使用 DSE 进行 Cassandra/Solr 集成,以便数据存储在 Cassandra 中并在 Solr 中建立索引。很自然地分别使用 Cassandra 处理 CRUD 操作和使用 Solr 进行全文搜索,并且 DSE 确实可以简化 Cassandra 和 Solr 之间的数据同步。

然而,当涉及到查询时,实际上有两种方法可以选择:Cassandra 辅助/手动配置索引与 Solr。我想知道何时使用哪种方法以及一般情况下的性能差异是什么,特别是在 DSE 设置下。

这是我的项目中的一个示例用例。我有一个 Cassandra 表存储一些项目实体数据。除了基本的 CRUD 操作之外,我还需要在某个字段(例如类别)上按相等性检索项目,然后按某种顺序排序(在我的例子中,是一个 like_count 字段)。

我可以想到三种不同的方法来处理它:

  1. 在 Solr 模式中为类别和 like_count 字段声明“indexed=true”并在 Solr 中查询
  2. 在 Cassandra 中使用主键(类别、like_count、id)创建非规范化表
  3. 在Cassandra中创建一个带有主键(category、order、id)的非规范化表,并使用外部组件(例如Spark/Storm)按like_count对项目进行排序

第一种方法似乎是最容易实现和维护的。我只编写一些简单的 Solr 访问代码,其余的繁重工作由 Solr/DSE 搜索处理。

第二种方法需要在创建和更新时手动进行反规范化。我还需要维护一个单独的表。还有墓碑问题,因为 like_count 可能会频繁更新。好的部分是读取可能会更快(如果没有过多的墓碑)。

第三种方法可以缓解墓碑​​问题,但需要一个额外的排序组件。

您认为哪种方法是最佳选择?性能上有什么区别?


Cassandra 二级索引的用例有限:

  1. 不超过几列索引。
  2. 查询中只有一个索引列。
  3. 高基数数据的节点间流量过多(相对唯一的列值)
  4. 低基数数据的节点间流量过多(匹配的行百分比较高)
  5. 需要提前了解查询,以便可以围绕它们优化数据模型。

由于这些限制,应用程序通常会创建“索引表”,并按所需的任何列进行索引。这需要将数据从主表复制到每个索引表,或者需要额外的查询来读取索引表,然后在从索引表读取主键后从主表读取实际行。对多个列的查询必须提前手动建立索引,这使得即席查询出现问题。并且任何重复项都必须由应用程序手动更新到每个索引表中。

除此之外......在从适度数量的节点中选择“适度”数量的行的情况下,它们将正常工作,并且查询是提前指定的而不是临时的。

DSE/Solr 更适合:

  1. 中等数量的列被索引。
  2. 引用大量列/字段的复杂查询 - Lucene 并行匹配查询中的所有指定字段。 Lucene 对每个节点上的数据建立索引,因此节点可以并行查询。
  3. 一般而言,即席查询,其中预先不知道精确的查询。
  4. 富文本查询,例如关键字搜索、通配符、模糊/类似、范围、不等式。

使用 Solr 索引会产生性能和容量成本,因此建议进行概念验证实施来评估需要多少额外 RAM、存储和节点,这取决于您索引的列数、索引的文本量以及任何文本过滤复杂性(例如,n 元语法需要更多。)其范围可能是从相对较少数量的索引列增加 25% 到如果所有列都建立索引则增加 100%。此外,您需要有足够的节点,以便每个节点的 Solr 索引适合 RAM,或者如果使用 SSD,则大部分适合 RAM。目前不建议将 vnode 用于 Solr 数据中心。

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

在 DSE 中何时使用 Cassandra 与 Solr? 的相关文章

  • 库存管理系统的 SQL 与 NoSQL

    我正在开发一个基于 JAVA 的网络应用程序 主要目的是拥有在多个称为渠道的网站上销售的产品的库存 我们将担任所有这些渠道的管理者 我们需要的是 用于管理每个渠道的库存更新的队列 库存表 其中包含每个通道上分配的正确快照 将会话 ID 和其
  • 如何在Cassandra中搜索不相等的二级索引?

    我需要能够仅使用 对二级索引执行搜索 据我所知 Cassandra 至少需要一个等式索引子句 因为它会迭代该等式索引的所有结果 是否有任何技巧可以仅使用 执行操作 至少在概念上 这是一个坏主意吗 另外 有人知道 Cassandra 是否有计
  • 使用 DataStax Java 驱动程序 1.0.4 通过 CQL 连接到 Cassandra 时出现异常

    我的笔记本电脑上运行的是 Cassandra 1 2 11 我可以使用连接到它nodetool and cqlsh但是当我尝试使用 DataStax 1 0 4 Java API 来使用 CQL 3 0 进行连接时 出现以下错误 com d
  • Cassandra 中的强一致性

    根据datastax文章 可以保证强一致性 如果 R W gt N 在哪里 R是读操作的一致性级别 W为写操作的一致性级别 N 是副本数 这里的强一致性是什么意思呢 这是否意味着 每次 从数据库给出查询响应时 响应将 始终 是最后更新的值
  • 本地/离线网站“站点”的全文搜索[重复]

    这个问题在这里已经有答案了 可能的重复 通过 javascript 对 CD Rom 上的静态 HTML 文件进行全文搜索 https stackoverflow com questions 1357173 full text search
  • 如何在 AWS Glue 中使用 Spark 包?

    我想使用 DatastaxSpark Cassandra 连接器 https mvnrepository com artifact com datastax spark spark cassandra connector 2 12 2 5
  • 使用 pycassa 读取 Cassandra 1.2 表

    使用卡桑德拉 1 2 我按以下方式使用 CQL 3 创建了一个表 CREATE TABLE foo user text PRIMARY KEY emails set
  • Cassandra 集群 - 特定节点 - 特定表高丢弃突变

    我在生产中的压缩策略是 LZ4 压缩 但我将其修改为 Deflate 对于压缩更改 我们必须使用 nodetool Upgradesstables 强制升级所有 sstable 上的压缩策略 但是 一旦在集群中的所有 5 个节点上完成了 U
  • 哪个 CQL 版本对应哪个 Cassandra 版本?

    CQL 文档是根据 CQL 版本而不是 Cassandra 产品版本来组织的 显然 我想阅读与我正在使用的 Cassandra 版本相对应的 CQL 文档 但我找不到有关哪个 CQL 版本对应于哪个 Cassandra 版本的全面信息 CQ
  • 将 CassandraUnit 与 Astyanax 结合使用时出现依赖性问题

    我有一个 SessionDaoCassandraImpl 类 它使用 Astyanax 从 Cassandra 读取数据 我想使用嵌入式 Cassandra 服务器进行测试 卡桑德拉单元 https github com jsevellec
  • 如何使用 Solr 索引 pdf 内容?

    我正在尝试使用 SolrJ 索引一些 pdf 文档 如下所述http wiki apache org solr ContentStreamUpdateRequestExample http wiki apache org solr Cont
  • openNLP 与 Solr 集成时出现异常

    我正在尝试将 openNLP 与 Solr 6 1 0 集成 我配置了架构和 solrconfig 文件 详细信息请参见 wiki 链接 https wiki apache org solr OpenNLP https wiki apach
  • 我们可以同时使用拼音标记和同义词吗?

    我正在尝试同时启用语音分析器和同义词 这似乎不起作用 它们一起使用有错吗 在下面的实现中 我希望使用同义词转换搜索查询 然后使用语音分析器来检索结果 但我的同义词在这里完全被忽略了 如果我在创建索引时删除语音分析器 那么同义词就可以正常工作
  • Redis是如何实现高吞吐量和高性能的?

    我知道这是一个非常普遍的问题 但是 我想了解允许 Redis 或 MemCached Cassandra 等缓存 以惊人的性能极限工作的主要架构决策是什么 如何维持连接 连接是 TCP 还是 HTTP 我知道它完全是用C写的 内存是如何管理
  • Solr:在带有空格的字符串上使用通配符

    我的问题与这里讨论的问题基本相同 带空格的 Solr 通配符查询 https stackoverflow com questions 10023133 solr wildcard query with whitespace 但这个问题没有得
  • 使用 TLS/SSL 保护 Cassandra 通信

    我们希望保护 Cassandra 免受中间人攻击 有没有办法配置 Cassandra 使客户端 服务器和服务器 服务器 复制 通信采用 SSL 加密 谢谢 简短的回答 不 对于客户端 服务器 节俭 151 https issues apac
  • Hector 在执行incrementCounter 后获取结果计数器值

    我们正在执行以下操作来更新计数器的值 现在我们想知道是否有一种简单的方法可以立即取回更新的计数器值 mutator incrementCounter rowid1 cf1 counter1 value Cassandra thrift AP
  • Cassandra CAS INSERT 对于具有毫秒延迟的请求超时

    我们正在对 cassandra 集群 3 个节点 复制因子 3 进行负载测试 并开始偶尔接收到写入超时异常对于一张表上的 CAS 插入操作 CREATE TABLE users by identity account ascii domai
  • 由于未定义符号,PECL solr 未加载:curl_easy_getinfo

    我正在尝试加载 PECL solr 扩展 我尝试使用 pecl install solr 并下载并使用 phpize configure make 来安装它 在这两种情况下 扩展安装时都没有错误 但在 apache 重新启动后 或在命令行上
  • Cassandra Read 花费的时间比预期要长

    我正在使用带有 CQL3 的 cassandra 1 2 我的键空间中有三个列族 当我查询其中一个列族 电话 时 需要很长时间才能检索 这是我的查询 select from phones where phone no in 90384875

随机推荐