さまざまな種類のデータに対応するオープン ソースのデータ管理 Web アプリケーションを作成することを考えています。
特権ユーザーは、次のことができる必要があります。
- 新しいエンティティ タイプを追加する (たとえば、「ユーザー」または「家族」)
- エンティティ タイプに新しいプロパティを追加します (たとえば、「性別」を「ユーザー」に)
- エンティティとプロパティの削除/変更
これらは、特権ユーザーの一般的なタスクです。彼は、アプリケーションの Web インターフェイスを介してこれを行います。最終的に、すべてのデータは、アプリケーションのすべてのタイプのユーザーが検索およびソートできる必要があります。2つの質問が私を悩ませます:
a) データベースにデータをどのように保存する必要がありますか? 実行時にデータベース テーブルや列を動的に追加/削除する必要がありますか?
私はデータベースの専門家ではありません。私は、リレーショナル データベースに関して、アプリケーションが実行時にテーブル (エンティティ) や列 (プロパティ) を動的に追加/削除できる必要があるという想像にとらわれています。そして、私はこの考えが好きではありません。同様に、そのような動的データを NoSQL データベースで処理する必要があるかどうかを考えています。
とにかく、この種の問題には、これまで見つけられなかった、考えられなかった、インテリジェントな標準的な解決策があると信じています。この種の動的データ管理に最適なアプローチは何ですか?
b) ORM または NoSQL を使用して Python でこれを実装する方法は?
リレーショナル データベース モデルの使用をお勧めする場合は、SQLAlchemy を使用したいと思います。ただし、実行時にORMを使用してテーブル/列を動的に作成する方法がわかりません。これが、実行時にテーブルと列を作成するよりもはるかに優れたアプローチがあることを願っている理由の 1 つです。推奨されるデータベース モデルは、SQLAlchemy で効率的に実装できますか?
NoSQL データベースの使用を推奨する場合、どのデータベースを使用しますか? 私は Redis を使うのが好きです -- Redisに基づく効率的な実装を想像できますか?
ご提案いただきありがとうございます。
いくつかのコメントに応じて編集します。
特定のエンティティ (「テーブル」) のすべてのインスタンス (「行」) が同じプロパティ/属性 (「列」) のセットを共有するという考え方です。ただし、特定のインスタンスが特定のプロパティ/属性に対して空の値を持っている場合、それは完全に有効です。
基本的に、ユーザーは Web サイトの簡単なフォームからデータを検索します。たとえば、プロパティ P が T より大きい値 V を持つエンティティ E のすべてのインスタンスを照会します。結果は、任意のプロパティの値でソートできます。
データセットが大きくなりすぎることはありません。したがって、最もばかげたアプローチでさえ、システムが機能することにつながると思います。しかし、私は愛好家であり、現代的で適切なテクノロジーを適用したいだけでなく、理論上のボトルネックにも気を配りたいと思っています。このプロジェクトを使用して、最先端のスケーラブルで信頼性の高い "Pythonic" の Web アプリケーションを設計する経験を収集したいと考えています。
最初のコメントは、NoSQL アプローチを推奨する傾向があるようです。私は Redis がとても好きですが、Mongo/Couch の Document/Collection モデルを利用しないのはばかげているようです。私はPython用のmongodbとmongoengineを調べてきました。そうすることで、正しい方向に一歩を踏み出すことができますか?
いくつかの回答/コメントに応じて編集2:
あなたの回答のほとんどから、リレーショナル画像でのテーブルと列の動的な作成/削除は適切ではないと結論付けています。これはもう貴重な情報です。また、1 つの意見として、エンティティとプロパティを動的に変更するというアイデア全体が悪い設計である可能性があるというものがあります。
まさにこの動的な性質がアプリケーションの主な目的/機能であるべきなので、私はこれをあきらめません。理論的な観点から、動的データ モデルで操作を実行することは、静的データ モデルで操作を実行するよりも必然的に遅くなることを認めます。これはまったく問題ありません。
抽象的な方法で表現すると、アプリケーションは管理する必要があります
- データ レイアウト、つまり、有効なエンティティ タイプの「動的リスト」と、有効なエンティティ タイプごとのプロパティの「動的リスト」
- データ自体
これを実装するためのインテリジェントで効率的な方法を探しています。あなたの回答から、NoSQL がここに行く方法のように見えます。これはもう 1 つの重要な結論です。