読み込み - データベース 画像 格納 java




フラットファイルデータベースは良いですか? (8)

フラットファイルデータベースのメリットについての情報のあるオプション。 私は、フラットファイルデータベーススキームを使用してカスタムブログのデータを管理することを検討しています。 これは、Linux OSの変種にデプロイされ、Javaで記述されます。

記事とコメントの両方の読み書きのパフォーマンスに関する否定的な点や肯定的な点は何ですか?

スラッシュドットを取得するのであれば、RDBMSではなくフラットファイルなので、記事の検索には間に合わないでしょうか? (願いが叶う)

私はRDBMSを使用することに反対しているだけでなく、コミュニティにそのようなソフトウェアアーキテクチャスキームの実行可能性に関する意見を聞くだけです。

フォローアップ:この質問の場合、「フラットファイル==ファイルシステムベース」と表示されます。たとえば、各ブログエントリとそれに付随するメタデータは単一ファイルになります。 ファイルフォルダ(blogs \ testblog2 \ 2008 \ 12 \ 01)の日付構造によって編成された多数のファイルの作成== 2008/12/01


これはDasblogのasp.netで行われています。 ファイルベースのストレージを使用します。

いくつかの詳細は、この古いリンクに記載されています。 http://www.hanselman.com/blog/UpcomingDasBlog19.aspx

また、 http://dasblog.info/Features.aspxで詳細を知ることもできます

私はパフォーマンスに関するいくつかの意見を聞いたことがあります。 そのタイプのシステムがあなたにとってうまくいくかどうかをもう少し調べてみることをお勧めします。 これは私がまだ聞いたことの最も近いものです。


ファイルデータベースが十分小さければ、ランダムアクセスが失われていないので、fiatファイルデータベースを使用することができます。 ランダムアクセスの多いビッグファイルは非常に遅くなります。 複雑なクエリもありません。 結合も、集計も、グループ化もありません。フラットファイルから階層データを取得することも期待できません。 XML形式は、複雑な構造の方がはるかに優れています。


恐ろしいアイデア。 追加するときは、何かを追加したいときはいつでもファイルの終わりまで探します。 更新するたびに、ファイル全体を書き換える必要があります。 読み込みにはテーブルスキャンが含まれます(または、書き込み/更新で同じ問題が発生する別のインデックスを維持する)。 もちろん、RDBMSが提供しているすべてのものを再実装しないと、ソリューションを適度にスケーラブルにすることができない限り、データベースを使用してください。


独自のエンジンをネイティブコードで記述すると、汎用データベースよりも優れたパフォーマンスを発揮できます。

しかし、エンジンの品質と機能レベルは決してそれに近づくことはありません。 データベースが索引付け、トランザクション、参照整合性の中心的な機能を提供するすべてのものは、すべて自分で実装する必要があります。

ホイールを改革すること(つまり、Linuxはまさにそのようなものでした)よりも何も問題はありませんが、あなたの期待と時間を念頭に置きましょう。


ほとんどの場合、フラットファイルデータベースで十分です。 しかし、データベースを使ってプロジェクトを始めると、あなたは若い人に感謝します。 PostgreSQLのようなデータベースシステム全体を設定したくない場合、これはSQLiteでもかまいません。


フラットファイルデータベースも可能ですが、以下の点を考慮してください。

データベースはすべてのACID要素(アトミック性、一貫性、分離性、耐久性)を達成する必要があり、すべてがフラットファイル(特に並行アクセス)で実行されることを保証する場合は、基本的に本格的なDBMS 。

なぜ、本格的なDBMSを最初に使用しないのですか?

無料のオプション(SQLite、MySQL、PostgresSQLなど)のいずれかを使用するだけで、書くことに関わる時間と費用を節約できます(何度も書き直し、私は保証します)。


これをチェックしてくださいhttp://jsondb.io opensource Javaベースのデータベースは、あなたが探しているもののほとんどを持っています。 データをフラットな.jsonファイル、マルチスレッドサポート、暗号化サポート、ORMサポート、原子力サポート、XPATHベースの高度なクエリサポートとして保存します。

免責事項:私はこのデータベースを作成しました。


ここから回答がコピーされ、修正されました

読取り専用アクセス以外にフラットファイルを使用することはお勧めしません。なぜなら、一度に1つのプロセスだけがファイルに書き込んでいるように、並行性の問題に対処しなければならないからです。 代わりに、私はSQLite 、ファイルに格納されている完全に機能するSQLデータベースをお勧めします。 SQLiteにはすでに並行処理機能が組み込まれているので、ファイルロックのようなことは心配する必要はなく、読み込み速度は非常に速いです。

しかし、多くのデータベース変更を行っている場合は、 トランザクション内でそれらを一度にすべて実行するのが最善です。 これは、変更クエリが発行されるたびに、変更をファイルに一度だけ書き込みます。 これにより、複数の変更を行う速度が飛躍的に向上します。

変更クエリが発行されると、そのクエリがトランザクション内にあるかどうかにかかわらず、そのクエリが終了するまでデータベース全体がロックされます。 つまり、非常に大きなトランザクションは、データベースにアクセスする前にトランザクションが終了するのを待つ必要があるため、他のプロセスのパフォーマンスに悪影響を与える可能性があります。 実際には、これは目立つものではありませんでしたが、発行するデータベース変更クエリの数を最小限に抑えることは常に良い方法ですが、フラットファイルを使用しようとすると確かに高速です。





architecture