- 各チャネルの在庫更新を管理するためのキュー。
これは必ずしもデータベースの問題ではありません。メッセージングシステム(RabbitMQなど)を検討したほうがよい場合があります
- 各チャネルでの割り当ての正しいスナップショットがある在庫テーブル。
- セッションIDやその他の高速アクセスデータをキャッシュに保持します。
セッションデータは、おそらくタスクにより適した別のデータベースに配置する必要があります(memcached、redisなど)。万能のDBはありません
- 販売者をできるだけ早く最新の状態に保つために、ダッシュボード(XMPP)のようなFacebookを提供します。
私の制約は次のとおりです:1。インベントリの更新を失うことはありません。
この質問に答えるには3つの方法があります:
-
この機能は、アプリケーションで提供する必要があります。データベースは、不良レコードが拒否されてロールバックされることを保証できますが、すべてのクエリが入力されることを保証することはできません。アプリは、エラーが発生したことを認識して再試行するのに十分な機能を備えている必要があります。
-
一部のDBはレコードをメモリに保存してから、メモリをディスクに定期的にフラッシュします。これにより、電源障害が発生した場合にデータが失われる可能性があります。 (たとえば、ジャーナリングを有効にしない限り、Mongoはデフォルトでこのように機能します。CouchDBは常にレコードに追加されます(削除でもレコードに追加されるフラグであるため、データの損失は非常に困難です))
-
一部のDBは、地震、ハリケーン、またはその他の自然災害が発生した場合でも、非常に信頼性が高くなるように設計されています。これらには、Cassandra、Hbase、Riak、Hadoopなどが含まれます
どのタイプの耐久性を参照していますか?
- ジョブキューは順番に実行する必要があり、できれば失われることはありません。
ほとんどのnoSQLソリューションは、並行して実行することを好みます。したがって、ここには2つのオプションがあります。すべてのクエリ(遅い)2に対してテーブル全体をロックするDBを使用します。よりスマートまたはイベント化されるようにアプリを構築します(クライアント側のシーケンシャルキューイング)
- 簡単/迅速な開発と将来のメンテナンス。
一般に、SQLは最初は開発が速いことがわかりますが、変更の実装は難しい場合があります。noSQLはもう少し計画が必要になる場合がありますが、アドホッククエリやスキーマ変更を行う方が簡単です。
おそらく自分自身に尋ねる必要がある質問は、次のようなものです。
-
「Map/Reduceの方が適している、集中的なクエリや詳細な分析が必要ですか?」
-
「スキーマを頻繁に変更する必要がありますか?
-
「私のデータは非常に関連性がありますか?どのようにですか?」
-
「選択したDBの背後にあるベンダーは、必要なときに役立つ十分な経験を持っていますか?」
-
「GeoSpatialインデックス作成、全文検索などの特別な機能が必要ですか?」
-
「データはリアルタイムにどれだけ必要ですか?1秒後までクエリに最新のレコードが表示されない場合は問題がありますか?許容できるレイテンシのレベルはどれくらいですか?」
-
「フェイルオーバーに関して本当に必要なもの」
-
「私のデータの大きさはどれくらいですか?メモリに収まりますか?1台のコンピューターに収まりますか?個々のレコードは大きいですか小さいですか?
-
「データはどのくらいの頻度で変更されますか?これはアーカイブですか?」
それぞれが独自のインベントリスキーマを持つ複数の顧客(チャネル?)がいる場合は、ドキュメントベースのDBに利点がある可能性があります。あるとき、在庫のあるeコマースシステムを調べたところ、235近くのテーブルがありました。また、特定のリレーショナルデータがある場合、SQLソリューションにもいくつかの利点があります。
与えられた制約の下でmongo、couch、riak、orientdbを使用してソリューションを構築する方法を確かに理解できます。しかし、どちらが最高ですか? DBベンダーと直接話をしてみて、nosqlテープを見るかもしれません