【问题标题】:What is the nature of Cassandra indexes created by DSE when using Solr integration?使用 Solr 集成时 DSE 创建的 Cassandra 索引的性质是什么?
【发布时间】:2016-05-20 02:04:51
【问题描述】:

使用 DSE 软件将 Solr 与 Cassandra 集成时,为列族添加 Solr 核心会在 Solr 架构中索引的所有顶级字段上创建索引。使用here 概述的示例 CF 和 Solr 架构,生成了一堆索引:

cassandra@cqlsh:demo1> desc demo;

CREATE TABLE demo1.demo (
    id text PRIMARY KEY,
    friends list<frozen<name>>,
    magic_numbers frozen<tuple<int, int, int>>,
    name frozen<name>,
    solr_query text,
    status text
[skipped]
CREATE CUSTOM INDEX demo1_demo_friends_index ON demo1.demo (friends) USING 'com.datastax.bdp.search.solr.Cql3SolrSecondaryIndex';
CREATE CUSTOM INDEX demo1_demo_magic_numbers_index ON demo1.demo (magic_numbers) USING 'com.datastax.bdp.search.solr.Cql3SolrSecondaryIndex';
CREATE CUSTOM INDEX demo1_demo_name_index ON demo1.demo (name) USING 'com.datastax.bdp.search.solr.Cql3SolrSecondaryIndex';
CREATE CUSTOM INDEX demo1_demo_solr_query_index ON demo1.demo (solr_query) USING 'com.datastax.bdp.search.solr.Cql3SolrSecondaryIndex';
CREATE CUSTOM INDEX demo1_demo_status_index ON demo1.demo (status) USING 'com.datastax.bdp.search.solr.Cql3SolrSecondaryIndex';

我想了解的是这些索引是否只是真正的 Solr 索引,只是因为正在进行一些集成而“显示”在 Cassandra 输出中,或者它们实际上是“完整的 Cassandra 索引”(对于没有更好的名称,但我说的是可以使用CREATE INDEX CQL 语句创建的索引)。问题是如果它们是 Cassandra 索引,那么它们会产生性能问题,因为相应的数据可能具有高基数。

如果它们不是“完整的 Cassandra 索引”,那么我想知道为什么在冻结字段上创建 Solr 核心会出现问题。 IE。如果我创建一个列族:

cassandra@cqlsh:demo1> CREATE TABLE demo2 ( 
  "id" VARCHAR PRIMARY KEY, 
  "name" frozen<Name>, 
 "friends" frozen<list<Name>> );

Solr 核心创建(dsetool create_coregenerateResources=true)失败:

WARN  [demo1.demo2 Index WorkPool scheduler thread-0] 2016-02-09 13:57:14,781  WorkPool.java:672 - Listener com.datastax.bdp.search.solr.AbstractSolrSecondaryIndex$SSIIndexPoolListener@69442bb
6 failed for pool demo1.demo2 Index with exception: SolrCore 'demo1.demo2' is not available due to init failure: org.apache.cassandra.exceptions.InvalidRequestException: Frozen collections cur
rently only support full-collection indexes. For example, 'CREATE INDEX ON <table>(full(<columnName>))'.
org.apache.solr.common.SolrException: SolrCore 'demo1.demo2' is not available due to init failure: org.apache.cassandra.exceptions.InvalidRequestException: Frozen collections currently only su
pport full-collection indexes. For example, 'CREATE INDEX ON <table>(full(<columnName>))'.
        at org.apache.solr.core.CoreContainer.getCore(CoreContainer.java:742) ~[solr-uber-with-auth_2.0-4.10.3.1.287.jar:4.10.3.1.287]
        at com.datastax.bdp.search.solr.core.CassandraCoreContainer.getCore(CassandraCoreContainer.java:171) ~[dse-search-4.8.4.jar:4.8.4]
        at com.datastax.bdp.search.solr.AbstractSolrSecondaryIndex.getCore(AbstractSolrSecondaryIndex.java:546) ~[dse-search-4.8.4.jar:4.8.4]
        at com.datastax.bdp.search.solr.AbstractSolrSecondaryIndex$SSIIndexPoolListener.onBackPressure(AbstractSolrSecondaryIndex.java:1467) ~[dse-search-4.8.4.jar:4.8.4]

(当然,按照博客中使用冻结字段列表而不是冻结字段列表的示例,这可以正常工作)。

【问题讨论】:

    标签: cassandra datastax datastax-enterprise


    【解决方案1】:

    我想了解的是这些索引是否只是真正的 Solr 索引,只是因为正在进行一些集成而“显示”在 Cassandra 输出中,或者它们实际上是“完整的 Cassandra 索引”

    DSE 搜索索引使用 Cassandra 的二级索引 API 在 Cassandra 写入路径和 Solr 文档更新机制之间架起一座桥梁。即使您在表描述中看到多个索引条目,它们也不是您在问题中提到的意义上的“完整 Cassandra 索引”。这些条目中的每一个都代表 same Solr 核心中的单个索引字段。

    我想知道为什么他们在冻结场上创建 Solr 核心时会遇到问题。

    您是否能够按照您提到的blog post 完成操作,或者您是否也观察到您的错误?如果您可以毫无错误地坚持到底,也许我们可以使用它作为基线来隔离您的问题。 (我假设您已经使用 dsetool create_coregenerateResources=true 来创建有问题的核心。)

    【讨论】:

    • 博客文章中的示例工作正常。到目前为止,我只发现它被冻结的 UDT 列表阻塞,没有尝试太多其他方法。我已经更新了问题以使其更清楚。感谢您解释索引。
    猜你喜欢
    • 2017-11-25
    • 2013-09-30
    • 2016-07-09
    • 2020-09-18
    • 2014-11-11
    • 1970-01-01
    • 2014-09-17
    • 2014-12-05
    • 2018-09-13
    相关资源
    最近更新 更多