【发布时间】:2016-07-09 18:48:54
【问题描述】:
根据DSE documentation,DSE Search 不支持计数器列。
我有一个带有 (ckey, count) 的基本 CF,其中count 是计数器。
create table change_count ( ckey text, count counter) primary key (ckey)
当然,dsetool create_core ks.change_count 在此 CF 上失败,因为有一个计数器,“计数器不支持 Solr 索引!”错误。
好的,所以我手动创建 Solr 架构文档:
<?xml version="1.0" encoding="UTF-8"?>
<schema name="autoSolrSchema" version="1.5">
<types>
<fieldType class="org.apache.solr.schema.StrField" name="StrField" />
</types>
<fields>
<field indexed="true" multiValued="false" name="ckey" stored="true" type="StrField" />
</fields>
<uniqueKey>(ckey)</uniqueKey>
</schema>
,将其保存在一个文件中,并使用dsetool create_core ks.change_count schema=/tmp/1.xml,但我仍然得到相同的“计数器不支持 Solr 索引!”错误。
所以,第一个问题是 - 有没有办法加强 DSE 并拥有一个带计数器的 CF,以及非计数器列上的 solr 索引。
如果不可能,那么我想对如何解决表示数据的问题提出任何建议。假设“ckey”是“纪元小时”,而 count 只是该小时内发生的一些事件的计数器。原子增量的计数器类型,即使我使用轻量级事务,此 CF 上的争用也会非常高。 Solr 索引在那里是因为我想做范围搜索等等。
我可以创建 2 个 CF:
create table change_count ( ckey text, count counter) primary key (ckey)
create table change_count_idx ( ckey text ) primary key (ckey)
然后我可以 Solr-index change_count_idx,但在 change_count 表中计数,确保我在两个表中都有相同的键。然后我可以使用 Solr 获取匹配的密钥,并使用 Cassandra 获取实际数据 - 进行客户端连接。但这可能是数千次 PK 查找,我认为性能不会在大范围内存活。
【问题讨论】:
-
在具有计数器列的表中,所有非计数器列都必须是主键的一部分。
-
这并不意味着在解决方案级别上回答您的问题,因此我将其移至此处。这只是对读者的提醒。 DSE 中的检查是针对表的元数据进行的,并假设您不想只索引主键。
-
@CalebRackliffe 但我可能只想索引我的主键,并使用 Solr 执行 Cassandra 不支持的疯狂查询。这就是这张特殊表格背后的想法。
-
如果您只想查找主键,我不确定您为什么首先需要 Solr。也许我在阅读中遗漏了一些东西......
-
@CalebRackliffe 我不想进行查找(这是 Cassandra 在 PK 上唯一支持的),我想做范围查询、非精确查询等。
标签: cassandra datastax datastax-enterprise