web-dev-qa-db-ja.com

データベースとフラットファイル

私が働いている会社は、フラットファイル形式を使用する製品をデータベース形式に切り替えようとしています。私たちは非常に大きなデータのファイル(つまり、25GB /ファイル)を処理しており、それらは非常に迅速に更新されます。データにランダムにアクセスするクエリを、連続して実行する必要があります。私は彼らにデータベースを使用することの利点を納得させようとしていますが、同僚の何人かはこれに気が進まないようです。だから私は、データベースを使うべき理由のいくつかの理由や投稿へのリンクで皆さんが私をここで手伝ってくれるか、少なくともフラットファイルが優れている理由を明確にします(もしあれば)と思っていました。

72
hyperboreean
  1. データベースはクエリタスクを処理できるため、ファイルを手動で調べる必要はありません。データベースは非常に複雑なクエリを処理できます。
  2. データベースはインデックス作成タスクを処理できるので、id = xのget recordのようなタスクが非常に高速になります
  3. データベースは、マルチプロセス/マルチスレッドアクセスを処理できます。
  4. データベースはネットワークからのアクセスを処理できます
  5. データベースはデータの整合性を監視できます
  6. データベースはデータを簡単に更新できます(1を参照)
  7. データベースは信頼できます
  8. データベースはトランザクションと同時アクセスを処理できます
  9. データベース+ ORMを使用すると、プログラマーにとって非常に使いやすい方法でデータを操作できます。
88
Andrey

これは 私がすでに与えた答え 少し前です:

ドメイン固有のアプリケーションのニーズに完全に依存します。多くの場合、ダイレクトテキストファイル/バイナリファイルアクセスは非常に高速で効率的であり、OSのファイルシステムのすべてのファイルアクセス機能を提供します。

さらに、プログラミング言語には、特定の解析用の組み込みモジュールが既にある(または簡単に作成できる)可能性が高いです。

必要なものが多数の追加(INSERTS?)で、シーケンシャル/いくつかのアクセスがほとんどない/まったくない場合、ファイルが最適です。

一方、並行性、非シーケンシャルな読み取り/書き込み、アトミック性、アトミックアクセス許可、データが本質的にリレーショナルであるなどの要件がある場合は、リレーショナルデータベースまたはOOデータベースを使用することをお勧めします。

SQLite で実現できることはたくさんあります。これは非常に軽く(300kb未満)、ACID準拠で、C/C++で書かれており、非常に遍在的です(プログラミングに含まれていない場合)言語-例えばPython-、確かに利用可能です)。 140テラバイトまたは128テビバイト( データベースサイズへのリンク )のDBファイルでも有効です。

要件が大きく、議論すらできない場合は、本格的なRDBMSに進んでください。

「システム」は単なるスクリプトの束であるとコメントで言うように、 pgbash を見てください。

39
Esteban Küber

あなたがそれを買うことができるならば、それを構築しないでください。

私は最近この引用を聞いたが、それは本当にガイドラインとしてふさわしいようだ。これを自問してみてください...アプリのファイル処理部分にどのくらいの時間を費やしましたか?パフォーマンスのためにこのコードを最適化するのにかなりの時間が費やされたと思います。リレーショナルデータベースをずっと使用していた場合、アプリケーションのこの部分の処理に費やす時間は大幅に短縮されました。アプリの真の「ビジネス」面により多くの時間を費やしていたでしょう。

8
G Mastros

より高速です。フラットファイル全体をメモリにロードしない限り、データベースはほとんどすべての場合に高速アクセスを許可します。

彼らはより安全です。データベースは安全にバックアップするのが簡単です。フラットファイルにはないファイル破損をチェックするメカニズムがあります。フラットファイルの破損がバックアップに移行されたら、作業は完了です。まだ知らないかもしれません。

より多くの機能があります。データベースでは、多くのユーザーが同時に読み取り/書き込みを行うことができます。

一度セットアップすれば、作業がはるかに簡単になります。

6
Dean J

データベース ずっと。

ただし、ファイルを保存する必要がある場合は、XMLを調べる以外に、新しいRDBMS(Oracle、SQLServerなど)を使用する能力がありません。

XMLは、ファイルとして物事を保存する機能を提供する構造ファイル形式ですが、ファイルとその中のデータに対するクエリ機能を提供します。 XMLファイルは、フラットファイルよりも読みやすく、XSLTを適用することで簡単に変換でき、さらに人間が読みやすくなります。 XMLは、必要に応じてデータを転送する優れた方法でもあります。

DBを強くお勧めしますが、そのルートをたどることができない場合、XMLは問題ありません。

3
Scott Root

AmazonのSimpleDB、Tokio Cabinetなどの非リレーショナル(NoSQL)データベースはどうですか? Google、Facebook、LinkedInがこれらを使用して巨大なデータセットを保存していると聞きました。

データが構造化されているか、スキーマが修正されているか、簡単な複製が必要か、アクセス時間が重要かなどを教えてください。

3
Victor

どのタイプのファイルが言及されていません。メディアファイルの場合は、フラットファイルを使用します。おそらく、タグ用のDBと、「外部BLOB」をDB内のレコードに関連付ける何らかの方法が必要です。ただし、全文検索が必要な場合は、フルDBに移行する以外に方法はありません。

もう1つは、物理ファイルの数に関する限り、ファイルシステムが上限を提供する場合があります。

2
bcosca

SQLアドホッククエリ機能は、私にとって十分な理由です。優れたスキーマとテーブルのインデックス付けにより、これは高速で効果的であり、優れたパフォーマンスを発揮します。

2
Oded

起動するたびにファイルをメモリにロードする場合を除き、データベースを使用します。そのような単純な。

それはあなたの大学が既にファイルへのクエリを処理するプログラムを持っていることを前提としています。そうでない場合は、データベースを使用します。

2
Lay González

データベースファイルとフラットファイルの違いを以下に示します。

  • データベースは柔軟性が高く、フラットファイルは柔軟性が低くなります。

  • データベースシステムはデータの一貫性を提供しますが、フラットファイルはデータの一貫性を提供できません。

  • データベースはフラットファイルよりも安全です。
  • データベースはDMLとDDLをサポートしていますが、フラットファイルはこれらをサポートできません。

  • データベースでのデータの冗長性が低く、フラットファイルでのデータの冗長性が高くなります。

1
rashedcs