スキーマのない財務データを扱うアプリケーションがあります。より正確には、シーマレス データは注文に関する情報であり、フィールドはマーチャントによってカスタマイズされます。一貫性と耐久性が重要です。
データが非常に動的であるため、報告は非常に困難です。各レコードはわずかに異なる場合もあれば、完全に異なる場合もあります。リレーショナル データベースを引き続き使用する場合、「ドキュメント」を BLOB としてシリアル化するしか選択肢がないように思われます。レポートは、おそらくユーザー定義レポートによって定義された共通構造にデータをコピーすることによって、個別に実行する必要があります (各「レポート」にはカスタム テーブルがあります)。
もう 1 つのオプションは、MongoDB のようなドキュメント指向の NoSQL データベースです。いくつかの調査を行った後、NoSQL データベースはACIDではなくBASEに依存しているため、ほとんどの人は NoSQL データベースを金融データで信頼しないようです。
私は、まったく異なる 2 つのユース ケースの真ん中にいるようです。私のデータはドキュメント指向データベース (MongoDB) に非常によく適合しますが、ACID データベースの信頼性が必要です。同時に、複雑なユーザー定義のレポートが必要です。
したがって、次の 3 つの選択肢があるようです。
- 2 つの MySQL データベースを使用します。1 つはデータ (blob) の保存用、もう 1 つはユーザー定義レポート (多数のテーブル) 用です。
- 大規模なデータベースをサポートしますが、グローバルな書き込みロックがあり、「最終的に一貫性がある」MongoDB を使用します。
- MySQL を使用してデータ (blob) を保存し、それをレポート用に MongoDB にコピーします。唯一のインデックスがおそらくmerchantIDになるとすれば、これはどの程度うまく機能するでしょうか?
では、3 つのうちどれが私の最良の選択肢 (柔軟性と耐久性が最も高い) でしょうか? データの動的性を変更できないことを知っているので、考慮していない他のオプションはありますか? 本番環境でのレポート作成に MongoDB を使用している人はいますか?
(RDMS には MySQL を使用しています。MariaDB に切り替えることを考えています。選択したプログラミング言語は PHP です。誰かの名前を検索するような全文検索に Sphinx を使用することを考えています。)