2012-01-04 5 views
3

私は、小規模企業の顧客向けのWebベースのClojureアプリケーションとして、VBベースの社内(ローカルにインストールされた)アプリケーション(請求書発行+在庫)を書き直すことを検討しています。私はこれを同様の取引で顧客向けのSaaSアプリケーションとして提供する予定です。SaaSアプリケーション用のスキーマフリー/フレキシブルACIDデータベース?

私はデータベースオプションを見ていました:私の選択はRDBMS:Postgresql/MySQLでした。最初の年には最大400人のユーザーに拡張できます。通常、ユーザーあたり1日に20〜40ページのビュー/ 1日あたり - 静的ビューではないトランザクションの場合がほとんどです。各ビューには、データのフェッチとデータの更新が必要です。 ACIDの遵守が必要です(または私はそう思います)。したがって、トランザクションの量は膨大ではありません。

私の好みに基づいてこれらのどちらかを選ぶのは簡単かもしれませんが、SaaSアプリの典型であると考えているこの1つの要件のために、私は多くの顧客/ユーザーを追加しながらスキーマが変更されます顧客の変化するビジネス要件ごとに(私はいくつかの限られた柔軟性を提供しています)。私は、DBの専門家ではないよ、私は考えることができると読んでいるものに基づいて、私はいくつかの方法でそれを処理することができます:

  1. ホスティング、単一のDBを使用してMySQL/PostgreSQLの伝統的なRDBMSスキーマの設計を持っています複数のテナント。また、各テーブルに十分な "フリーフローティング"列を追加することで、将来の変更を可能にし、顧客や変更を既存の顧客に追加することができます。これは、スキーマが少し変更されるたびに変更をDBに伝播するという欠点があります。 PostgreSQLスキーマのアップデートでは、ロックせずにリアルタイムで行うことができます。しかし、このユースケースではどれほど苦痛か、どれほど実用的かはわかりません。また、スキーマの変更により、新しい/マイナーなSQL変更も導入される可能性があります。
  2. RDBMSを用意していますが、データベーススキーマを柔軟にエンティティ属性値に近い値またはキー値ストアとして設計します。 (workday、FriendFeedなど)
  3. メモリ内のすべてのオブジェクトをオブジェクトとしてログファイルに定期的に保存します(例:edval、lmax)
  4. MongoDBやRedisのようなNoSQL DBに移動します。しかし、私が収集できるものに基づいて、このユースケースには適しておらず、ACIDに完全に準拠していません。
  5. VoltDbやJustoneDb(クラウドベース)のようなSQLとACIDに準拠した動作を保持し、 "new-gen" RDBMSのようないくつかのNewSQL Dbsを参照してください。
  6. 私はのNeo4j(graphdb)を見て、それは、スケーラビリティや分散コンピューティングよりも、私は "達成するためのより良い方法で探しています、私のユースケースでは、このユースケース

に合うかどうかわかりませんスキーマ+ ACIDの柔軟性+いくつかの妥当なパフォーマンス "。私がネット上で見つけることができる記事のほとんどは、スキーマの柔軟性を、パフォーマンス(NoSQL DBの場合)とACID /トランザクション側を除外してスケーラビリティにつなげる原因として説明しています。

は、この「いずれか、または」取引「ACID対スキーマの柔軟性」の場合またはより良い方法アウトはありますか?

+0

読むを参照してください続行する前に(http://stackoverflow.com/a/8343142/562459)[このSO答えます]。 (マルチテナントデータベースに関する情報が不足しているように思えます。) –

+0

@キャットコール:ありがとう。私は前にMSDNの記事を読んでいました。私は(私のポイント#1:共有データベース、共有スキーマ - MSDNの用語を見てください)を見ていました。私の質問は、(RDBMSの中にある)ACID保証を維持しながら、スキーマの柔軟性(これはNoSQLの土地です)を達成するための方法ですか? – tmbsundar

答えて

0

私はtarantoolがあなたを助けることができると思います。そのソリューションは、トランザクション、LUA、msgpack、およびなどを持っており、また、そのvideo