データベースの最も単純な実装
すべてのアプリケーション ソフトウェアの中で、データベースが最も複雑かもしれません。
MySQLのマニュアルは3,000ページ以上、PostgreSQLのマニュアルは2,000ページ以上、Oracleのマニュアルは両方を合わせたよりも厚いです。
しかし、最も単純なデータベースを自分で書くことは難しくありません。 Reddit には、原理をわずか数百語で明確に説明した投稿があります。以下はこの投稿をもとに私がまとめたものです。
1.データをテキスト形式で保存します
最初のステップは、保存したいデータをテキストファイルに書き込むことです。このテキスト ファイルがデータベースになります。
読みやすくするために、データをレコードに分割し、各レコードの長さが等しくなるように指定する必要があります。たとえば、各レコードの長さが 800 バイトであると仮定すると、5 番目のレコードの開始位置は 3200 バイトになります。
ほとんどの場合、私たちは特定のレコードの位置を知りません。知っているのは主キーの値だけです。このとき、データを読み取るために、レコードを 1 つずつ比較することができます。ただし、実際のアプリケーションでは、データベースはデータの保存に B ツリー形式を使用することがよくあります。
2. B ツリーとは何ですか?
B ツリーを理解するには、二分探索木から始める必要があります。
二分探索木は非常に探索効率の高いデータ構造であり、3つの特徴があります。
(1) 各ノードには最大 2 つのサブツリーがあります。
(2) 左側のサブツリーは親ノードより小さい値を持ち、右側のサブツリーは親ノードより大きい値を持ちます。
(3) n 個のノード間でターゲット値を見つけるには、通常、log(n) の比較のみが必要です。
二分探索木の構造は、探索効率がレベル数に関係するため、データベースには適していません。データが低いほど、より多くの比較が必要になります。極端な場合、ターゲット値を見つけるには、n 個のデータで n 回の比較が必要になります。データベースの場合、レイヤーに入るたびにハードディスクからデータを読み取る必要があります。これは、データベースがデータを読み取る回数が少ないほど、ハードディスクの読み取り時間がはるかに長いためです。ハードディスクであればあるほど良いです。
Bツリーは二分探索木を改良したものです。その設計上の考え方は、複数のデータを一度に読み取ることができ、ハードディスクの操作数を減らすことができるように、関連するデータをできるだけまとめることです。
B-treeにも3つの特徴があります。
(1) ノードは複数の値を保持できます。たとえば、上の図では、最大のノードは 4 つの値を保持します。
(2) データが既に入力されていない限り、新しいレイヤーは追加されません。言い換えれば、B-tree は可能な限り少ない「層」を追求します。
(3) 子ノードの値は、親ノードの値と厳密にサイズが一致します。一般に、親ノードに値がある場合、a+1 個の子ノードが存在します。たとえば、上の図では、親ノードには 2 つの値 (7 と 16) があり、これらは 3 つの子ノードに対応しており、最初の子ノードの値は 7 より小さく、最後の子ノードの値は 16 より大きくなります。 、中央の子ノード 7 ~ 16 の値です。
このデータ構造は、ハードディスクからの読み取り回数を減らすのに非常に役立ちます。ノードが 100 個の値を保持できると仮定すると、3 層の B ツリーは 100 万個のデータを保持できます。これを二分探索ツリーに置き換えると、20 個の層が必要になります。オペレーティング システムが一度に 1 つのノードを読み取り、ルート ノードがメモリ内に残ると仮定すると、B ツリーは 100 万個のデータの中からターゲット値を見つけるためにハードディスクを 2 回読み取るだけで済みます。
3. インデックス
データベースは B ツリー形式で保存されており、「主キー」に従ってデータを検索する問題のみを解決します。他のフィールドを検索したい場合は、インデックスを作成する必要があります。
いわゆるインデックスとは、あるフィールドをキーとしたBツリーファイルのことです。従業員番号 (主キー) と名前の 2 つのフィールドを含む「従業員テーブル」があるとします。名前のインデックス ファイルを作成して、名前を B ツリー形式で保存できます。各名前の後にデータベース内の位置 (つまり、どのレコードが指定されるか) が続きます。名前を検索する場合は、まずインデックスから対応するレコードを見つけてから、テーブルからそれを読み取ります。
このインデックス検索方式を「Indexed Sequential Access Method」、略してISAMといいます。すでに複数の実装 (C-ISAM ライブラリや D-ISAM ライブラリなど) が用意されており、これらのコード ライブラリを使用する限り、最も単純なデータベースを自分で作成できます。
4. 高度な機能
最も基本的なデータ アクセス (インデックス作成を含む) を展開した後、いくつかの高度な機能も実装できます。
(1) SQL 言語はデータベースの汎用操作言語であるため、SQL コマンドを対応する ISAM 操作に解析するには SQL パーサーが必要です。
(2)データベース接続(join)とは、データベース内の2つのテーブル間に「外部キー」を介して接続関係を確立することを指します。この操作を最適化する必要があります。
(3) データベーストランザクション (トランザクション) は、バッチでの一連のデータベース操作を指します。1 つのステップが失敗すると、操作全体が失敗します。そのため、操作が失敗した場合にロールバックできるように「操作ログ」を保持する必要があります。
(4) バックアップの仕組み: データベースのコピーを保存します。
(5) リモート操作: TCP/IP プロトコルを介して、ユーザーが異なるマシン上でデータベースを操作できるようにします。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











MySQLとPHPMyAdminは、強力なデータベース管理ツールです。 1)MySQLは、データベースとテーブルを作成し、DMLおよびSQLクエリを実行するために使用されます。 2)PHPMyAdminは、データベース管理、テーブル構造管理、データ操作、ユーザー許可管理のための直感的なインターフェイスを提供します。

Oracleはデータベース会社だけでなく、クラウドコンピューティングとERPシステムのリーダーでもあります。 1。Oracleは、データベースからクラウドサービスおよびERPシステムへの包括的なソリューションを提供します。 2。Oraclecloudは、AWSとAzureに挑戦し、IAAS、PAAS、SAASサービスを提供します。 3. e-businesssuiteやfusionApplicationsなどのOracleのERPシステムは、企業がオペレーションを最適化するのに役立ちます。

MySQLでは、外部キーの機能は、テーブル間の関係を確立し、データの一貫性と整合性を確保することです。外部キーは、参照整合性チェックとカスケード操作を通じてデータの有効性を維持します。パフォーマンスの最適化に注意し、それらを使用するときに一般的なエラーを避けてください。

MySQLとMariaDBの主な違いは、パフォーマンス、機能、ライセンスです。1。MySQLはOracleによって開発され、Mariadbはフォークです。 2. Mariadbは、高負荷環境でパフォーマンスを向上させる可能性があります。 3.MariaDBは、より多くのストレージエンジンと機能を提供します。 4.MySQLは二重ライセンスを採用し、MariaDBは完全にオープンソースです。既存のインフラストラクチャ、パフォーマンス要件、機能要件、およびライセンスコストを選択する際に考慮する必要があります。

MySQLとPHPMyAdminは、次の手順を通じて効果的に管理できます。1。データベースの作成と削除:PHPMyAdminをクリックして完了します。 2。テーブルの管理:テーブルを作成し、構造を変更し、インデックスを追加できます。 3。データ操作:データの挿入、更新、削除、SQLクエリの実行をサポートします。 4。データのインポートとエクスポート:SQL、CSV、XML、およびその他の形式をサポートします。 5。最適化と監視:最適化可能なコマンドを使用してテーブルを最適化し、クエリアナライザーと監視ツールを使用してパフォーマンスの問題を解決します。

SQLはリレーショナルデータベースを管理するための標準言語であり、MySQLはSQLを使用するデータベース管理システムです。 SQLは、CRUD操作を含むデータベースと対話する方法を定義しますが、MySQLはSQL標準を実装し、ストアドプロシージャやトリガーなどの追加機能を提供します。

Redisは、主にデータベース、キャッシュ、メッセージブローカーとして使用されるメモリデータ構造ストレージシステムです。そのコア機能には、シングルスレッドモデル、I/O多重化、持続メカニズム、複製、クラスタリング機能が含まれます。 Redisは、キャッシュ、セッションストレージ、メッセージキューのための実際のアプリケーションで一般的に使用されます。適切なデータ構造を選択し、パイプラインとトランザクションを使用し、監視とチューニングを使用することにより、パフォーマンスを大幅に改善できます。

MySQLでは、AlterTabletable_nameaddcolumnnew_columnvarchar(255)afterexisting_columnを使用してフィールドを追加し、andtabletable_namedopcolumncolumn_to_dropを使用してフィールドを削除します。フィールドを追加するときは、クエリのパフォーマンスとデータ構造を最適化する場所を指定する必要があります。フィールドを削除する前に、操作が不可逆的であることを確認する必要があります。オンラインDDL、バックアップデータ、テスト環境、および低負荷期間を使用したテーブル構造の変更は、パフォーマンスの最適化とベストプラクティスです。
