2016-03-22 8 views
1

DSE documentationによれば、DSE Searchはカウンタ列をサポートしていません。DSEのCassandraカウンタとSolrインデックスを組み合わせる最良の方法

私は基本的なCFを(ckey、c​​ount)としています(countはカウンタです)。カウンターがあるので、「Solrのインデックスがカウンターではサポートされていません!」と

create table change_count (ckey text, count counter) primary key (ckey) 

当然、dsetool create_core ks.change_countは、このCFに失敗しますエラー。

OK、私は手動での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を使用しますが、私はまだ同じを取得しますエラー。

最初の質問は、DSEを強化し、カウンタを持つCFを持ち、カウンターではない列のsolrインデックスを持つ方法です。

可能であれば、私はデータの表現の問題を解決する方法を提案したいと思います。 「ckey」が「エポックタイム」であり、カウントがその時間に発生したイベントのカウンタに過ぎないとしましょう。軽量トランザクションを使用していても、原子増分のカウンタタイプ、この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のインデックスchange_count_idxすることができますが、私は両方で同じキーを持つことを確認して、change_countテーブルでカウントを。それから、Solrと実際のデータを使ってCassandraを使って一致する鍵を得ることができます。クライアント側の結合です。しかし、それは潜在的に何千ものPK検索である可能性があり、パフォーマンスが広範囲に生き残るとは考えていません。

+0

カウンタ列を持つテーブルでは、すべての*非カウンタ*列がプライマリキーの一部でなければなりません。 –

+0

これはソリューションレベルでのご質問に対する回答ではありませんので、ここでそれを変更しました。それは読者のための思い出です。 DSEのチェックはテーブルのメタデータと照合され、プライマリキーだけをインデックスに登録したくないと仮定します。 –

+0

@CalebRackliffeしかし、私はプライマリキーだけをインデックスにし、Solrを使ってCassandraでサポートされていないクレイジークエリを実行することができます。それはこの特定のテーブルの背後にあるアイデアです。 –

答えて

0

DSE Searchでは厳密には記述できません。

それは脆いかもしれませんが、あなたが実際にこれらのカウンタを検索したい場合は、counterの代わりにbigintを使用していますchange_countの「ミラーリング」バージョンを作成することを検討することをお勧めします。その後、定期的にchange_countのデータを「ミラー化」テーブルに読み込み、それに対して直接照会することができます。

関連する問題