1

大量の注文トランザクション レコードをコマース Web サイトからリポジトリに保存することを計画しています (ここでは Cassandra を使用する必要があります。これが私たちの DB です)。このコンポーネントを commerceOrderRecorderService と呼びましょう。

問題の 2 番目の部分は、これらの注文を処理して、他のダウンストリーム システムにプッシュしたいということです。このコンポーネントは、batchCommerceOrderProcessor と呼ぶことができます。

commerceOrderRecorderService と batchCommerceOrderProcessor はどちらも Java プラットフォームで実行されます。

これらのコンポーネントの設計について提案が必要です。特に以下:

commerceOrderRecorderService

  1. パフォーマンスとスケーラビリティを考慮して、列を設計する最善の方法は何ですか? 注文全体 (複雑なエンティティ) を単一の JSON オブジェクトとして保存する必要がありますか? 注文属性に関する検索要件はありません。少なくとも、バッチ プロセッサによって処理されるまで待つことができます。1 つの注文に多くのサブアイテムが含まれている可能性があることを考慮してください。このようなデータ構造の列を設計するのはやり過ぎかもしれません

  2. データ量が多くなることを考えると、何が重要なのか。ピーク時には毎秒 10 トランザクションとしましょう。Cassandra でそのようなトランザクション データを作成するためのライブラリまたはベスト プラクティスはありますか? TTLも有効に使えますか?

batchCommerceOrderProcessor

  1. 処理のために行をどのように取得する必要がありますか?
  2. バッチ プロセッサのマルチスレッド実装 (および複数のノードで実行される可能性がある) が行レベルで分離されるようにする方法。つまり、2 つのインスタンスが同じ行を同時に読み取って処理することはありません。重複処理はありません。
  3. 圧縮などの cassandra プロセスに対応しながら、一定期間後にデータをパージする方法。

設計入力、コード サンプル、およびライブラリへのポインタを高く評価します。ありがとう。

4

2 に答える 2

2

システムの全体的な要件に応じて、以下で構成されるアーキテクチャを採用することが可能です。

  1. 注文、分析、およびあなたが持っているものを保存するCassandra 。
  2. メッセージ キュー- コマース オーダー レコーダー サービスは、新しい注文をトランザクション キューと永続キューに単純にエンキューして、戻ります。単一のキュー サーバーで 1 秒あたり数千のトランザクションを簡単に達成できるため、ここではスケーラビリティとパフォーマンスは問題になりません。利用可能な選択肢の 1 つとして、RabbitMQ を検討しているかもしれません。
  3. ストリーム処理フレームワーク- Twitter Storm などのストリーミング フレームワークを使用して、スケーラブルな方法でキューからメッセージのストリームを読み取ることができます。Storm の 3 つの単純なパイプライン プロセスよりも Java で実装できます。

    a) キューから次の注文を取り出して 2 番目のプロセスに渡すスパウト プロセス
    b) 次の各注文を Cassandra に挿入し、それを 3 番目のボルトに渡す、Bolt と呼ばれる2 番目のプロセス
    c) 注文を他の下流にプッシュする 3 番目の Bolt プロセスシステム。

このようなアーキテクチャは、高性能、スケーラビリティ、およびほぼリアルタイムの低遅延データ処理を提供します。Cassandra は高速なデータ書き込みには非常に優れていますが、レコードのシーケンシャル リストの読み取りにはそれほど強くないことを考慮に入れています。InnoQuant MOCA プラットフォームで Storm+Cassandra の組み合わせを使用し、ハードウェアに応じて 25.000 tx/秒以上を処理します。

最後に、そのようなアーキテクチャがシナリオにとって過剰ではないかどうかを検討する必要があります。最近では、ほぼすべての単一ボックス データベースで 10 tx/秒を簡単に達成できます。

于 2014-01-19T13:37:50.113 に答える
1

この例は少し役立つかもしれません。jmxbulkloader を使用して多くのトランザクションをロードし、結果を特定のサイズのファイルにバッチ処理して、別の場所に転送します。マルチスレッドですが、同じプロセス内にあります。

https://github.com/PatrickCallaghan/datastax-bulkloader-writer-example

それが役に立てば幸い。ところで、最新のcassandra 2.0.5を使用しています。

于 2014-02-18T16:29:59.077 に答える