【发布时间】:2014-11-15 22:28:28
【问题描述】:
com.datastax.bdp.search.solr.Cql3SolrSecondaryIndex 是 Datastax 引入的用于 Solr 集成的自定义 Cassandra 索引类型。我的主要问题是:CQL 查询不能使用这些自定义索引吗?我在索引列上尝试了一些使用过滤器的 CQL 查询,但它们总是以 RPC 超时结束。
我的用例:
我有一个表,其中查询通常涉及多列上的过滤器。由于 Cassandra 的原生二级索引一次只能在一列中定义(即一个索引 = 一列),并且任何给定的 CQL 查询只能使用一个索引,我认为我无法使用 CQL 满足应用程序的读取要求.这就是我使用 Solr 进行所有读取操作的原因——因为 Solr 可以一次过滤多个列。这适用于大多数情况;但是我有两个查询结果对 Solr 来说太重了。现在,我想尝试 Spark,因为我已经了解了它惊人的分析功能。然而,我偶然发现了一个障碍:Spark 依靠 CQL“WHERE”来过滤掉将从 Cassandra 加载到 Spark 的数据。而且由于 CQL 查询似乎无法使用 Cql3SolrSecondaryIndex 进行读取,我不知道如何将数据加载到 Spark 中。我知道在将数据从 Cassandra 加载到 Spark 时,Cassandra 服务器端的过滤不是强制性的;但就我而言,这是必需,因为表太大(大约 40 亿条记录分布在 RF=2 的 6 个节点上)。我试图在我打算过滤的列之一中定义原生 Cassandra 索引,但 Cassandra 抛出错误,指出该列已存在索引(即 Cql3SolrSecondaryIndex 索引)。
现在在我看来:DSE 迫使我在 Solr 和 Spark 之间进行选择 - 如果我在 Solr 核心中包含一个列,则将在该列中定义 Cql3SolrSecondaryIndex 索引,并且我无法再在其中定义本机 Cassandra 索引.如果没有本机 Cassandra 索引,CQL 查询将无法在该列上进行过滤。如果没有服务器端 CQL 过滤,Spark 将无法加载所有 40 亿行,并可能触发 OOM。
我的印象正确吗?有解决办法吗?
【问题讨论】:
标签: cassandra apache-spark cql3 datastax-enterprise datastax