2016-04-14 4 views
0

状況

伝統的なデータベースを使用して倉庫システムを実装しようとしています。rethinkdbを使用した倉庫システムの実装:必要なACIDの要件はありますか?

表は次のとおり

  1. 製品(1つのSKUを表す各列)
  2. warehouse_locations
  3. パレット(各行が特定のパレットを表す。)(各行は、特定の特定の倉庫内の棚を表します。)
  4. user_defined_categories(各行は特定のユーザー定義のカテゴリを表します。
  5. products_in_pallets_by_categories(たとえば、予約済み、利用可能、total_physicalなど)各行は、パレット、製品、およびuser_defined_categoriesテーブルの外部キーを持ちます。特定のカテゴリの特定のパレット内の製品数を指定します)。
  6. products_in_warehouse_locations_by_categories(各行には、warehouse_locations、productsテーブル、およびuser_defined_categoriesの外部キーがあります。ユーザーが/やる

    エンドユーザーがどのようなパレットに削除/配置されているどのような製品について、システムを更新します見たいどのような終わり)

エンドユーザーは、倉庫内に予約されている製品または利用可能な製品の数をいつでも(好ましくはリアルタイムで)知りたいことがあります。

私の最初の計画は何ですか?

PostgresQLのような伝統的なRDBMSと、RabbitMQのようなメッセージキューを使って、リアルタイムの更新を提供したいと考えました。リアルタイム更新では、単一のページアプリケーションまたは携帯電話のいずれかを使用しているエンドユーザーが、在庫の変更をリアルタイムで観察できることを意味します。

何が変更されましたか?あなたは完全なACIDサポートや強い スキーマの施行-で、この場合、あなたがそのようなMySQLやPostgreSQLのようリレーショナル データベースを使用してオフに優れているが必要な場合は

I came across rethinkdb FAQ、それは

RethinkDB言ったは良い選択ではありません。

なぜrethinkdbを検討していますか?

私はそれを使用することができ、リアルタイムの更新が可能なので、顧客のセールスチームが私たちのシステム上で世界各地に予約を置くことを期待しているので大いに役立ちます。

最も頻繁な更新/挿入は何ですか?

ある場所から別の場所への製品の移動。私はリレーションテーブルにたくさんの更新/挿入/削除を期待しています。時々、私はrethinkdbのパラダイムでこれを説明する方法を知らないことをお詫びします。私は伝統的なRDBMSの人です。

システムはまだ構築されていますか?

まだありません。だから私は実際に進む前にrethinkdbに関する答えを探したいのです。

トランザクションを使用しますか?

まあ、わかりません。

倉庫労働者が製品を(一部または完全に)1つのパレットから別のパレットに移動させる現実の事例を考えることができます。

もう1つの実際のケースは、倉庫作業員が製品をパレットから倉庫の場所に移動する場合(またはその逆)です。

私は間違いなくトランザクションを使用する必要がありますか?再び、私は確信していません。

原因物理的に移動が完了した後に、システムを更新することを期待しています。

彼らは<another dropdown>

から<some dropdown>から

  • 移動を選択するために、私は画面を提供しますので、質問は何ですか?

現時点では、ユーザーの要件に基づいて、倉庫システムの完全なACIDサポートまたは強力なスキーマの適用が必要ですか?それはrethinkdbを使って実装可能ですか?

私はまた、システムは、あなたが物事を扱っている場合、そのような労働者Aのようなイベントが25

+1

リレーショナルデータベース**は、 "*たくさんの更新/挿入/削除*"を行うために使用されています。なぜあなたはPostgresでそれをすることができないと思いますか? –

+1

私はこの質問が哲学/ディスカッション指向のクエリだと思っていますが、分散システムの専門家であるAphyr => https://aphyr.com/posts/329-jepsen-rethinkdb- 2-1-5。 RethinkDBは 'hard consistent'と 'majority'の読み込みに適切なフラグを使って '結局一貫性がある'ということを強調しません。RethinkDBを使ってかなり安定した(そして確かに検証された)設定ができます。 – dalanmiller

+0

@dalanmillerリンクをありがとう本当にrethinkdbしていますか? –

答えて

0

をパレットに倉庫の棚1Aから製品Aの100の単位を移動表示されている実装された後ctivity streamsを実装することを期待する場所情報常に正確で一貫性のある、ACIDの問題でなければなりません。あなたが言うことから、それが重要であるように聞こえる。

リアルタイムアップデートを許可したいと思うのですが、重要な問題はrabbit-mqを非リアルタイムコンポーネントとして見ているようなものですね。なぜあなたはRabbitMQを検討していたのですか? (メンテナンスのためにデータベースを停止させるのであれば、おそらくsqliteにバックアッププライベートキャッシングストアを実装するのですか?)

一般的に、最終的な一貫性がOKのモデルがない限り、ACID準拠が必要です。さらに、リアルタイムの正確なレポートは最終的な一貫性を排除します。

+0

私はさらに研究をしました。再考や他の同様のNoSQL技術で可能な2フェーズコミットと呼ばれるものがあります。 2フェーズコミットを使用して、最終的な一貫性と呼ぶものは何ですか?リアルタイム更新では、単一のページアプリケーションまたは携帯電話のいずれかを使用しているエンドユーザーが、在庫の変更をリアルタイムで観察できることを意味します。その謝罪。 –

+1

ACIDへの準拠について尋ねました。2PCは、分散システムにおける一貫性を強制するために使用されるものです。言い換えれば、2PCを使用すると、すべてのシステムにコミットできるかどうかを確認してからコミットします。その時点で、コミットは保証されます。 PostgreSQLにも2PCがあります。しかし、2PCは概念として一貫性モデルを指定せず、ACIDはコミット・モデルを指定しないため、2つの考慮事項は理論的には異なります。 –

+0

私に教えてくれてありがとう、postgresは2PCも使う。私は今まで知らなかった。一貫性モデルに関しては、どのような例ですか?私はグーグルで試してみたが、Wikipediaの答えは私のためには鈍い。あなたは理論的にはACIDと2PCは異なると言いました。実際には、私の状況に関して、特に2PCは「ACIDに十分に準拠していますか? –

関連する問題