2016-03-31 3 views
5

カサンドラ初心者の質問です。私はREST呼び出しを使ってソーシャルネットワーキングサイトからいくつかのデータを収集しています。だから、私はJSON形式でデータが返ってくることになります。 JSONは私のテーブルの列の1つだけです。私はJSON文字列を格納する "ベストプラクティス"が何であるか把握しようとしています。最初にマップタイプを使用すると考えましたが、JSONには文字列、数値タイプなどが含まれています。地図キー/値にワイルドカードタイプを宣言できるようには思えません。 JSON文字列は非常に大きく、おそらくサイズが10KBを超えています。私は潜在的に文字列としてそれを格納することができますが、それは非効率的であるように思えます。私はこれが一般的な仕事だと思うので、これを行う方法に関するいくつかの一般的なガイドラインがあると確信しています。私はCassandraがJSONをネイティブにサポートしていることを知っていますが、私が理解するところでは、JSONマップ全体が1-1のデータベーススキーマと一致するときに使用されます。それは私には当てはまりません。スキーマには一連の列があり、JSON文字列は単なる「ペイロード」の一種です。 JSON文字列をBLOBまたは "テキスト"として保存する方が良いですか?ところで、カサンドラバージョンは2.1.5です。どんなヒントもありがとう。前もって感謝します。JSON文字列をCassandraカラムに効率的に保存するには?

答えて

6

カサンドラストレージエンジンでブロブとテキストの間には大きな違いが実際にそこではない、という欠点を持っている直接

読める人間ではありません基本的にテキストをブロブとして保存します。はい、あなたが話す「ネイティブ」JSONサポートは、データモデルがJSONモデルと一致する場合にのみ使用され、Cassandra 2.2以降のものです。

私はテキストタイプとして保存します。データを送信するとき(または圧縮解除を処理するとき)にJSONデータを圧縮するために何かを実装する必要はありません。 Cassandraのバイナリプロトコルはtransport compressionをサポートしているのでまた、あなたのテーブルには、同じ圧縮アルゴリズムを使用してdata compressedが格納されていることを確認してください(読み込み要求ごとに圧縮する際に保存するために、LZ4を使用することをお勧めします)。したがって、圧縮データの格納とトランスポート圧縮の使用を構成する場合は、どちらかを実装する必要はありません。

使用しているクライアントドライバについては言及していませんが、Datastax Java Client Driverのトランスポート圧縮を設定する方法に関するドキュメントがあります。

+0

ありがとうございます。私はSpring Data Cassandra 1.3.4.RELEASEを使用しています。これにより、Cassandra Driverバージョン2.Xにとどまることができます。私はドライバのバージョンとして2.1.9を使用しています。 Springは、Factoryインスタンスを作成するためのファクトリBeanを提供しています。圧縮をサポートしていないか、Snappyしかないようです。これを指定する方法は、唯一の引数としてEnumをとり、Enumにはこれらの2つのオプションがあります。理由は分かりません。私はそれがサポートされて以来、今はスナッピーで試してみると思います。または、私はSpring Data Cassandraを削除して、クラスタを手動でインスタンス化することができます。 – user2337270

+1

私はCassandraのバネデータのファンではありません。APIはリレーショナルデータベース用に設計されているため、実装の決定には苦労しています。例:CassandraOperations.insert(リストオブジェクト)は、すべての挿入に対してBATCHステートメントを実行します。これは、アンチパターンです。 Pagableデータを実装すると、カウント(*)が実行され、デフォルトではデータの自動ページングは​​使用されません(Pagable Slicesで選択する必要があります)。このように、Datastaxドライバを代わりに使用することを強く推奨します.Cassandraを開発するためのより優れたコントロールと機能が得られます。 – fromanator

+0

@fromanatorを教えてください。私が最近遭遇したもう一つの制限は、Spring Data CassandraがDataStaxの3.Xドライバをサポートしていないことです。しばらくの間、私は2.Xに固執しています。 – user2337270

2

JSONの照会方法によって異なります。 3つの可能な戦略があります。

  1. Storeはオプション1が読める人間であるという利点を持っている

が照会ブロブとして圧縮ブロブ

  • ストアとして文字列
  • 店としてあなたcqlshのコマンドライン上のデータ、または直接データをデバッグしたい場合。欠点はこのJSON列(10k)のサイズです

    オプション2は、テキスト要素の圧縮率がかなり高いためJSONペイロードを小さく保つ利点があります。欠点は次のとおりです。あなたは圧縮/解凍クライアントサイドとbの世話をする必要があります。それは、オプション3は、カサンドラ以来、オプション1(サイズ)及び2(読める人間ではない)

  • +0

    バイナリトランスポート圧縮と一緒にテーブルレベルの圧縮を利用できるように、圧縮を自分で処理する必要はありません。この方法でテキストデータ型として保存することができます。保存時に圧縮され、アプリケーションに渡されたときに圧縮され、人間の読みやすい形式になります(クライアントドライバまたはcqlshであっても、圧縮された形式)。 – fromanator

    +0

    はい、テーブル圧縮とトランスポート圧縮オプションもあります。+1 – doanduyhai