在DSE中组合Cassandra计数器和Solr索引的最佳方法是什么

时间:2016-03-22 18:01:17

标签: cassandra datastax datastax-enterprise

根据DSE documentation,DSE搜索不支持计数器列。

我有一个基本的CF(ckey,count),其中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'是“epoch hour”,而count只是在那个小时内发生的一些事件的反击。原子增量的计数器类型,即使我使用轻量级事务,此CF上的争用也会非常高。索尔索引是因为我想进行范围搜索等等。

我可以创建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查找,我认为性能不会在大范围内存在。

1 个答案:

答案 0 :(得分:0)

DSE搜索无法严格描述您所描述的内容。

它可能很脆弱,但如果你真的想要搜索这些计数器,你可能要考虑创建change_count的“镜像”版本,使用bigint代替counter 。然后,您可以定期将change_count中的数据读入“镜像”表并直接查询。