web-dev-qa-db-ja.com

テーブル内の特定のセルに対するデータベース操作(書き込み、更新、変更)は、ファイル全体を上書きせずにディスクにどのように書き込まれますか?

pythonを使用してExcelファイル/テーブルの特定のセルに書き込みまたは変更したい場合pandas read_csvを使用して、特定のセルの値を変更して書き込みますto_csvを使用してファイルに戻る。ただし、ファイルに書き戻すと、ファイル全体が上書きされ、更新されたバージョンのファイルが1つのセルでのみ異なるようになります。これは、1兆行と1兆列のテーブルで1つまたは2つのセルを変更するときに問題になります。 。

1兆行単位のテーブルから単一のセルに対して(SQLのように)書き込み/変更データベース操作を行っている場合、ファイル全体を上書きするのではなく、変更されたセルのみをディスクに変更しているようです。

データベースは、ファイル全体を上書きするのではなく、ディスク内のテーブルの特定のセルのみを書き込み/更新することをどのように促進しますか?

ところで、テーブルには数値の列名が含まれており、SQLはそれをサポートしていないため、SQLデータベースを使用していません。列名として数値をサポートするSQL/NOSQLデータベースを知っている場合は、私に知らせてください。

4
Optic_Ray

データベースに関する非常に一般的な誤解は、これで解消できます。

    Database != File 

データベースの行を更新するとき、ディスク上の基になるデータファイルは変更されませんまったく-少なくとも「しばらくの間」。代わりに、データベースはトランザクションログの変更を記録してから、値in memoryを更新します。しばらくすると、データベースは別の何かのためにそのメモリを必要とするようになり、変更された値をディスクに書き込みます。これが発生する頻度と一度に書き込まれるメモリの量は、DBMSによって異なります。

データベース内のデータストレージはPagesで測定され、それぞれに複数の行を含めることができます。あなたと私が一緒にプレイするテーブルを構成するもの。データベースがデータを必要とするとき、データベースはそのデータがデータファイル内のどこにあるかを調べ、relevantであるページのみをバッファキャッシュ(メモリ)にロードします。 )。これが、最初の実行時に一部のクエリの実行速度が遅いが、その後は非常に高速になる理由です。キャッシュから同じページを繰り返し処理すると、way高速で処理するよりも高速です。ディスク上のデータファイルからアップ。

...テーブルに数値の列名が含まれているため、SQLデータベースを使用していません...

データベースについての別の誤解がありますが、これも簡単に一掃できます。

    Database != SpreadSheet 

データベースでデータを構造化する方法は、最初はかなり「異質」に見えるかもしれません。データの「行」と「列」だけでなく、「複雑な」「人工的な」構成を使用する必要があるようです。しかし、whyを理解すると、これらの構造と、それらがあなたに与えるpowerが必要になりますデータ、あなたはそれをかなりすぐに乗り越えるでしょう。

...オペレーション... 1兆から1兆のテーブルの単一セルで...

1兆×1兆のテーブルのすべての値に本当に有用な値がありますか?個人的には、あなたがグーグルで働いていない限り、私はそれを疑います。

actuallyが持つのは、データよりも多くの「穴」があるスパース配列です。これは、リレーショナルテーブルが非常に簡単かつ非常に効率的にサポートできる構造です。

14
Phill W.