私のアプリケーションはDAOレイヤーにAbstractFactoryを使用しているため、HBase DAOファミリーが実装されたら、Cassandra DAOファミリーを作成し、いくつかの観点から違いを確認することは非常に素晴らしいことです。
とにかく、そうしようとすると、CassandraはHBaseのようなセルバージョン管理をサポートしていない(そして私のアプリケーションはそれを強力に使用している)ので、これを「エミュレート」するためのテーブルデザインのトリック(または何か他のもの)があるかどうか疑問に思いましたカサンドラでの動作
質問する
1586 次
1 に答える
3
一般的な戦略の 1 つは、通常の列名とバージョンの 2 つのコンポーネントを持つ複合列名を使用することです。バージョン コンポーネントに何を使用するかは、アクセス パターンによって異なります。複数のクライアントから同時に更新が行われる可能性がある場合は、TimeUUID を使用するのが最も安全なオプションです。一度に 1 つのクライアントしか更新できない場合は、タイムスタンプやバージョン番号など、より小さなものを使用できます。
簡単にするためにバージョン番号を使用すると仮定すると、バージョン管理されたフィールドを持つドキュメントを保存する場合は次のようになります。
| ('body', 5) | ('body', 4) | ... | ('title', 1) | ('title', 0) |
|-------------|-------------|-----|--------------|--------------|
| 'Neque ...' | 'Dolor ...' | ... | 'Lorem Ipsum'| 'My Document'|
この形式は、フィールドの特定のバージョン、フィールドのすべてのバージョン、またはすべてのフィールドのすべてのバージョンが必要な場合に主に役立ちます。
すべてのフィールドの最新バージョンを一度に効率的にフェッチすることもサポートしたい場合は、非正規化して、各フィールドの最新バージョンのみが通常の形式で格納される 2 番目の列ファミリーを追加することをお勧めします。変更ごとにこれらのフィールドをやみくもに上書きできます。例を続けると、この列ファミリーは次のようになります。
| 'body' | 'title' |
|-------------|---------------|
| 'Neque ...' | 'Lorem Ipsum' |
于 2012-09-15T19:04:46.330 に答える