web-dev-qa-db-ja.com

データ構造を使用するアルゴリズムとデータベースを使用するアルゴリズムの違いは何ですか?

一般的な質問

データ構造を使用するアルゴリズムとデータベースを使用するアルゴリズムの違いは何ですか?

いくつかのコンテキスト

これはしばらくの間私を悩ませてきた質問であり、私はそれについて説得力のある答えを出すことができませんでした。

現在、もちろん、データ構造に深く関わるアルゴリズムの理解を深めるために取り組んでいます。これらは、バッグ、キュー、スタック、プライオリティキュー、ヒープなどの基本的な構造です。

また、データベースを日常的に使用して、エンドユーザーによって処理および送信されたデータ、またはプログラムによって処理されたデータを保存しています。データベースのテーブルに基づいて生成された独自のデータ構造を持つDALを介して、データを取得して送信します。

私の質問は、データベースを使用してデータをソートして、昇順/降順で注文したデータを送り返すか、データを取得してロジックにロードし、このデータを優先度キューで処理して、ヒープソートするオプションがあるときに発生しますそれのすべて。または、レコードのサブセットをロードしてバイナリ検索のようなものを使用するのではなく、データベースを使用してレコードを検索し、興味のあるレコードを見つけることもできます。

私の考えでは、通信は高価であるため、送信する前に、データベース側でできるだけ多くの操作を実行しようと思います。これにより、データベースのデータではなく、独自のロジック内で厳密に定義されたアルゴリズムとデータ構造を使用してデータを処理するのはいつになるのでしょうか。

だからここに質問があります...

ご質問

  1. データ構造とデータベースの違いは何ですか?
  2. データベースのロジックではなく、独自のロジック内でのみ定義されたデータ構造を使用するアルゴリズムをいつ使用しますか?
  3. @ Harvey post:データベースのメソッドを使用すると、独自のロジックのメソッドよりも効率が悪くなりますか?
    • @ mirculixx post:メソッドを効率的にするものは何ですか?
  4. @ Harvey post:データベースで行うよりもデータ構造でデータを処理する方が高速ですか?

明確化

  1. @ Grant post:私が通常使用するデータベースはリレーショナルであり、これらの質問はそれらを使用することから生まれています。ただし、これらの質問はどの永続フレームワークにも適用できると思います(フレームワークと言うとき、私は最も一般的な意味でそれを意味します)。

特定の文脈がないと答えが難しいことは知っています。考えられる食べ物、アドバイス、またはディスカッションのポイントは主に私が探しているものであり、最もありがたいです!

10
hulkmeister

データ構造は、ほとんどの場合、次のとおりです。

  1. メモリ常駐、
  2. 一時的、
  3. サイズ限定、
  4. ロックや不変性などの同時実行メカニズムを追加せずに再入不可
  5. 不可 [〜#〜]酸[〜#〜] 準拠、
  6. 慎重に選択すれば高速。

データベースは、ほとんどの場合:

  1. ディスクバインド、
  2. 持続的、
  3. 大、
  4. 安全に並行して、
  5. ACID準拠、 トランザクション 機能、
  6. データ構造より遅い

データ構造は、ある場所から別の場所に渡され、プログラム内で内部的に使用されることを意図しています。データベースを使用してWebページからWebサーバーにデータを最後に送信したのはいつですか、または完全にメモリに常駐していたデータベースで計算を実行したのはいつですか。

データベースシステムは、内部実装の一部としてデータ構造を使用します。それはサイズと範囲の問題です。プログラム内でデータ構造を使用しますが、データベースシステムはプログラムそのものです

18
Robert Harvey

データ構造とデータベースの違いは何ですか?

抽象レベルではありません-データベースデータ構造です。

特定のレベルでは、データベースは通常、データの永続化を目的としており、通常は挿入、更新、取得、結合、またはその他の目的(または組み合わせ)に最適化された形式です。

例えば。データの配列と言うためにRDBMSのテーブルを比較する場合、違いは、アルゴリズムのランタイム、書き込む必要があるコードの量、アルゴリズムを実行するために必要なメモリの量、またはプログラム/アルゴリズムの外部からデータを操作/アクセスする柔軟性。

データベースのロジックではなく、独自のロジック内でのみ定義されたデータ構造を使用するアルゴリズムをいつ使用しますか?

傾向で私は主張します

a)ランタイムまたは特定のアルゴリズムの目的を超えてアクセス可能な方法でデータを永続化する必要がある場合は、データベースを使用します。

b)実行時の速度が重要な場合、または永続性が必要ない場合は、独自の(メモリ内の)データ構造を使用する

例えば。アルゴリズムが顧客レコードを処理する場合、それらの顧客レコードを保存して(たとえば、特定の領域ですべての顧客を見つける)、後で他のプログラム/アルゴリズムで使用したり、まったく異なる目的(たとえば、最も価値のある顧客を見つける)に使用したりできます。 。その場合は、データベースを使用してデータを永続化することをお勧めします。

ただし、パフォーマンス上の理由から、必ずしもデータを永続化しないインメモリデータベースの概念があることに注意してください。例えば。 Redis または [〜#〜] hana [〜#〜]

データベース内のメソッドは、独自のロジック内のメソッドよりも使用効率が低下するのはいつですか?

答えは、状況や使用しているデータベース(のタイプ)に大きく依存します。私は質問を「メソッドを効率的にするものは何か」に言い換えます。次に、独自のデータ構造との比較に使用する方法(=アルゴリズム)を評価する練習になります。データベースが使用するメソッド。次のポイントも参照してください。

データベースでデータを処理するよりも、データ構造でデータを処理する方が高速ですか?

繰り返しますが、これは詳細に依存します。一般に、メモリ内にあり、アルゴリズムを実行するプロセスに直接アクセスできるデータの処理は、(同じコンピューターまたはネットワークを介して)別のプロセスに要求を送信して結果を返すように要求するよりも高速です。 。ただし、データがすでにデータベース内にある場合は、コマンドを送信して(2つのテーブルを結合して集計関数を計算するSQLステートメントを発声します)、データの小さな要約またはサブセットのみを取得する方が、最初にすべてを転送するよりもはるかに効率的です。データとローカルでの結果の計算(独自のデータ構造を使用)。

6
miraculixx

ディスクアクセスは、主にこの操作で最もコストがかかるものであり、ネットワークアクセスよりも高額です(http://serverfault.com/questions/238417/are-networks-now-faster-than-disks)。データベースが1 Gbps以上のネットワーク上になく、web\applicationサーバーと同じネットワーク上にない限り、ネットワークパフォーマンスは、大規模なデータセットのディスクパフォ​​ーマンスほど重要ではありません。または、データが非常に高速なソリッドステートディスクにある場合、通常のネットワークアクセスよりも高速になります。また、データベースは通常、データベースがアプリケーションサーバーと同じサーバー上にある場合、TCP/IPを使用する代わりに、名前付きパイプのようなIPCメカニズムを提供します。

要求間でメモリ内のほとんどのデータ構造を\ n保持できる場合は、これが一般的に最速の賭けになります。それができない場合は、特に何百万ものレコードがあるシステムでは、レコードの小さなセット以外の検索と更新のパフォーマンスのために、正規化されたテーブルと適切なインデックスを備えた優れたデータベース構造を打ち負かすことは困難です。

リレーショナルデータベースは通常、B +ツリーまたはそのバリアントを内部で使用し、頻繁にアクセスされるレコードのディスクおよびバッファープールでのデータアライメントなどの多くの最適化を行います。これにより、特に集計やフィルタリングが含まれている場合に、大規模なデータセットをすばやく処理できるようになります。

1
Peter Smith

データベースとはどういう意味ですか? MySQLやSQL Serverなどのリレーショナルデータベースを意味しますか?リレーショナルデータベースは、 リレーショナルモデル で定義された操作の一部をサポートするメタデータ構造です。 60年代にEdgar Coddが主に作成したリレーショナルモデルの理論。

リレーショナルモデルは非常に汎用的で柔軟ですが、データの構造やアクセスパターンを利用することはできません。データ構造は、データとそのデータへのアクセス方法について知っている場合に役立ちます。たとえば、データ構造に入力した最後のデータが最初に必要なデータになることがわかっている場合は、スタックを使用できます。

リレーショナルデータベースは、スタック、キュー、ツリー、リストなどの多くのデータ構造を使用してリレーショナルテーブルの抽象的なデータ構造を作成するソフトウェアのかなり大きな塊であるため、リレーショナルデータベースをメタデータ構造と呼びました。

0