2012-01-24 6 views
0

。私の列ファミリにはURL値を格納するフィールドがあります。 もちろん、大きなデータセットでこの特定の値を検索するのが遅くなる可能性があります。カサンドラ、実装高カーディナリティのインデックス

ソリューションとして

、私は例えば、URLの最初の文字を取って、それらを別々の列で を保存するというアイデアを作ってみましたtest.com/abcdは(ab、test.com/abcd)の列として格納されます。 特定のURL値による検索を実行する必要があるとき、私が得た結果セットで正確なURLを探して、その後、最初で唯一の「AB」を検索して26 * 26回で、それを絞り込むことができますように。

それはカサンドラにURLのカーディナリティを減らすために実用的なソリューションのように見えるのか?

答えて

2

あなたが本当に速くなるためにこれを必要とする場合、あなたはおそらく、あなたが列をキーとして探している値を別のテーブルを持つ考えたいです。キープレフィックス検索は通常、BigTable実装の列検索よりも高速です。

1

最後に、の1つのの特定のURLが照会されるように、低カーディナリティインデックスを使用した後で、順次スキャンが続く必要があるという問題があります。

クリスShainが述べたように、あなたは転置インデックスを構築するために別の列の家族を構築することができます。

Column Family 'people' 

ssn | name  | url 
----- | ------ | --- 
1234 | foo  | http://example.com/1234 
5678 | bar  | http://hello.com/world 



Column Family 'urls' 

url      | ssn 
------------------------ | ------ 
http://example.com/1234 | 1234 
http://hello.com/world | 5678 

欠点は、あなたが手動インデックス自身の整合性を維持する必要があるということです。

関連する問題