私は、小規模企業の顧客向けのWebベースのClojureアプリケーションとして、VBベースのオンプレミス(ローカルにインストールされた)アプリケーション(請求書+在庫)を書き換えることを検討しています。これは、同様の取引の顧客向けのSaaSアプリケーションとして提供される予定です。
私はデータベースオプションを見ていました:私の選択はRDBMS:Postgresql / MySQLでした。最初の1年間で最大400人のユーザーにスケールする可能性があります。通常、ユーザーあたり1日あたり20〜40ページビューです。ほとんどの場合、静的ビューではないトランザクションに使用します。各ビューには、データの取得とデータの更新が含まれます。ACIDコンプライアンスが必要です(またはそう思う)。そのため、トランザクション量は膨大ではありません。
私の好みに基づいてこれらのいずれかを選択するのは簡単でしたが、この1つの要件のために、SaaSアプリの典型であると信じています:スキーマは、顧客/ユーザーを追加し、各顧客のビジネス要件の変更(最初に限って柔軟性を制限します)。私はDBの専門家ではないので、私が考えることができ、読んだことに基づいて、多くの方法でそれを処理できます。
- 複数のテナントをホストする単一のDBを使用して、MySQl / Postgresqlで従来のRDBMSスキーマを設計します。さらに、顧客を追加したり、既存の顧客に変更を加えたりするときに、将来の変更に対応できるように、各テーブルに十分な「浮動」列を追加します。これには、スキーマに小さな変更が加えられるたびにDBに変更が伝播されるという欠点があります。Postgresqlのスキーマ更新では、ロックなしでリアルタイムに更新できることを読んだことを覚えています。しかし、このユースケースでどれだけ苦痛であるか、どれほど実用的かはわかりません。また、スキーマの変更により、新しい/小さなSQL変更も導入される可能性があるためです。
- RDBMSを使用しますが、データベーススキーマを柔軟な方法で設計します。エンティティ属性値に近い値を使用するか、単にキー値ストアとして使用します。(就業日、たとえばFriendFeed)
- オブジェクト全体をメモリ内にオブジェクトとして保持し、定期的にログファイルに保存します(edval、lmaxなど)。
- MongoDBやRedisなどのNoSQL DBを探してください。しかし、私が収集できるものに基づいて、これらはこのユースケースに適さず、ACIDに完全に準拠していません。
- SQLおよびACID準拠の動作を保持し、「新世代」のRDBMSであるVoltDbやJustoneDb(クラウドベース)などのNewSQL Dbsを探します。
- neo4j(graphdb)を見ましたが、それがこのユースケースに適合するかどうかはわかりません
スケーラビリティや分散コンピューティング以上のユースケースでは、「スキーマ+ ACIDの柔軟性+合理的なパフォーマンス」を実現するためのより良い方法を探しています。ネット上のほとんどの記事では、ACID / Transactions側を除外しつつ、パフォーマンス(NoSQL DBの場合)とスケーラビリティにつながる原因としてのスキーマの柔軟性について述べています。
これは、「スキーマの柔軟性とACID」トランザクションの「どちらか」のケースですか、それともより良い方法がありますか?