データベースは、C#アプリケーションのデータストレージに適した選択ですか?
-
29-09-2019 - |
質問
私はC#アプリケーションを開発しており、これらの仕様に適合するデータストレージに最適な選択肢を選択することを確認したいと考えています。
プログラムには無限の量のデータを持つことができますが、そのデータはアプリケーションを使用している単一のユーザーによってのみ使用されます。アプリケーションが閉じるたびに、データを保存する必要があり、アプリケーションの開始時にロードする必要があります。
私はデータベースを見ましたが、どちらが私のニーズに最適かわからない。また、上記の仕様を与えられたデータベースが必要なのか、シリアル化と脱派化を実装するバイナリファイル/XMLファイルを使用するだけかもしれません。
私を正しい方向に向けてください!
ありがとう、OC
編集:含めるのを忘れた重要な要素の1つは、1人のユーザーが入力したすべてのエントリを保存し、アプリケーション/ユーザー間で簡単に共有できる外部ファイルにエクスポートできるようにする必要性です。
解決
特定のアプリケーションが何をするかについて詳しく知ることなく、データベースが正しい選択であるかどうかを言うのは難しいです。 ただし、決定を操縦するために使用できる経験則がいくつかあります。
データベースは、次の場合に適している場合があります。
- データは、複数のユーザーが使用できます。
- 同時アクティビティが可能な場合は、正しく保存する必要があります。
- 収集されたデータがすべてメモリに一度にロードする必要はありません。
- 複雑な方法でデータをクエリまたはレポートできるようにしたい場合。
- 標準ツールを使用して保存されているデータに透明性を透明にしたい場合。
- データストア全体を再構築する必要があるのではなく、変更がほとんどローカライズされている場合。
- あなたのデータが(階層的表現を言うのではなく)リレーショナルにそれ自体を貸し出すとき。
データベースは、次の場合に最適な選択ではない場合があります。
- 1人のユーザーのみにサービスを提供します。
- 同時アクティビティはほとんどなく、変更を保存するときにデータモデル全体を再作成する必要があります。
- データがほとんどない場合、一度にメモリにロードされます。
- データが階層的であるか、関係的にモデル化するのが難しい場合。
- アプリケーションがドキュメント指向であり、ドキュメント(ファイル)が他のユーザーに送信される場合。
- 保存するデータには、かなりの量のバイナリデータが散在する場合。
- サードパーティのツールやサービスへの依存関係を避けたい場合。
- データモデルの構造が頻繁に変更される可能性が高い場合。
これらはすべて経験則です...データベースを使用するかどうかを決定する単一の条件はありません。すべての考慮事項を調べ、データベースを使用すると十分な利益が得られるかどうかを決定する必要があります。
多くの環境(たとえば、iPhoneなど)では、プラットフォームに直接利用できる内蔵データベースレイヤーがあります。また、オブジェクトリレーショナルモデリング(ORM)インピーデンスミスマッチを克服するのに役立つツール(NSCOREDATAなど)もあります。そのような場合、非常に単純なデータストレージにこれまでにデータベースを使用することは非常に理にかなっています。
また、データベースを永続的なストアとして使用することを簡素化するのに役立つ多くのオープンソースデータ永続性レイヤー(Nhiberante、DB4Oなど)もあります。 。
データベースは、クエリまたは検索機能をサポートする必要がある場合に、アプリケーションの開発を大幅に簡素化できます。リレーショナルデータベースはクエリ言語(SQL)をサポートしており、データベースから結果を識別および取得する努力をはるかに簡単に移動します。データベースは、データベースがクエリ操作を正しく効率的に実行するように特別に設計されているため、重いリフティングを行うことが重要な時間節約になる可能性があります。ただし、これは、適切に設計されたリレーショナルデータ構造を犠牲にします - これを作成する必要があります。
重要な考慮事項の1つは、ユーザーがアプリケーションを使用して作成/消費するデータを共有するかどうかです。アプリケーションがよりドキュメント指向(Word、Excel、PowerPointを考えてください)の場合、ファイルベースのシリアル化モデルがより適切になる場合があります。アプリケーションのデータが共有されない場合、データベースが理にかなっている場合があります。
もう1つの重要な要因は、データをどのようにオープンにしたいかです。データベースは情報を明確に定義された構造(表)に保存します。これにより、データに直接アクセスして検査できるようになります。 XMLなどのストレージ形式もこれを許可しますが、やや低い範囲で許可されています。
他のヒント
MySQLやSQL Serverなどの本格的なクライアント/サーバーデータベースは、おそらく1人のユーザーにとっては過剰になります。しかし、あなたはおそらく埋め込まれた/ファイルベースのエンジンからいくらかの使用を得るでしょう sqlite また SQL Server CE, 、特に、IDで単一のレコードを検索するよりも、データを使用してやりたい場合。自分でデータストレージを行った場合、特定の基準を満たすレコードを取得するには、大量のコードを書く必要があります。私は、生計のためにそれをする人と同じようにあなたがそれについてもそうしないことを保証する必要があります。
個人的には、アプリケーションを使用しているユーザーの数よりもデータに関するものです。
あなたのデータについて考えてください、それは複雑ですか?あなたが実際にデータベースを作成した場合、行の量ではなく、オブジェクトの点でどれだけ大きくなるか...テーブルの数など...
将来について考えてみてください。ただし、1人のユーザーのみですが、データはまだ増加しています。
データベースアプローチは開発をスピードアップすることは間違いありません。また、データはXMLファイルよりも整合性が高くなります。私は個人的にファイルを使用するのが嫌いです...私は過去にファイルからデータが欠落しているなどの経験がありました。
リソースを制限したい場合は、常にSQL Compact Editionがあります。
リポジトリにストレージ機能を実装する場合1)2)、ファイルへの保存から始めてから、後で必要性を特定した場合はデータベースストレージに移動できます。
1) http://martinfowler.com/eaacatalog/repository.html
2) https://web.archive.org/web/20110503184234/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/10/08/the-repository-pattern.aspx