Riakに大きなバイナリ値を保存する方法を知っている人はいますか?
4 に答える
今のところ、50MBを超えるサイズのファイルを分割せずに保存することはお勧めしません。参照:FAQ-Riak Wiki
ファイルが50MB未満の場合は、Riakに非バイナリデータを保存する場合と同じように続行します。
Riakを選ぶもう1つの理由は、データのモデリングに柔軟性を持たせるためです。Riakは、コンテンツに依存しない方法でデータを保存します。テーブル、列、または参照整合性を強制することはありません。これは、JSONやXMLなどのプログラマーに透過的な形式と一緒にバイナリファイルを保存できることを意味します。Riakを一種の「ドキュメントデータベース」(半構造化された、ほとんど非正規化されたデータ)および「添付ファイルストレージ」として使用すると、キー/値スタイルのスキームとは異なるニーズがあります。つまり、効率的なオンラインクエリの必要性、競合解決、内部セマンティクスの向上、および関係の堅牢な表現。Riakのスキーマ設計-はじめに
@Brian Mansellの答えは正しい方向に進んでいます-Riakに大きなバイナリ値(50 MB以上)を単一のオブジェクトとして保存することは本当に望ましくありません(しばらくすると、クラスターが非常に遅くなります)。
代わりに、2つのオプションがあります。
1)バイナリオブジェクトが十分に小さい場合は、直接保存します。特定のしきい値を超えている場合(50 MBは最初は適切な任意の値ですが、実際には、いくつかのパフォーマンステストを実行して、クラスターの平均オブジェクトサイズを確認し、その後クロールを開始します)-分割しますファイルをいくつかのチャンクに分割し、チャンクを個別に保存します。(実際、私が見たほとんどの人はこのルートに行き、サイズが1 MBのチャンクを使用します)。これは、もちろん、「マニフェスト」、つまりどのチャンクがどこに、どのような順序で保存されたかを追跡する必要があることを意味します。次に、ファイルを取得するには、最初にチャンクを追跡するオブジェクトをフェッチしてから、個々のファイルチャンクをフェッチして、元のファイルに再アセンブルする必要があります。https://github.com/podados/python-riakfsのようなプロジェクトを見てください彼らがどのようにそれをしたかを見るために。
2)または、Riak CS(Riak Cloud Storage)を使用して上記のすべてを実行することもできますが、コードは自動的に作成されます。これがまさにRiakCSの仕組みです。受信ファイルをチャンクに分割し、プレーンなRiakに個別に保存および追跡し、フェッチするときに再アセンブルします。また、便利なように、ファイルストレージ用のAmazonS3APIを提供します。私はこのルートを強くお勧めします(車輪の再発明をしないために-ファイルのチャンク化と追跡は十分に困難です)。はい、CSは有料製品ですが、興味があれば無料の開発者トライアルをチェックしてください。
他のすべての値と同じように。なぜ違うのでしょうか?
Erlang インターフェース ( http://hg.basho.com/riak/src/461421125af9/doc/basic-client.txt ) または「生の」HTTP インターフェース ( http://hg.basho.com/riak/ src/tip/doc/raw-http-howto.txt )。「うまくいく」はずです。
また、一般的に、riak-users メーリング リストでは、ここよりも優れた応答を見つけることができます。 http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com (z8000 には問題ありません。z8000 にも回答があるようです。)