#PHPCMS にはどのデータベースが適していますか?
PHPCMS は PHP で書かれており、PHP は MySQL をより適切にサポートしているため、PHPCMS には MySQL データベースを使用することをお勧めします。そのため、オープンソースのリレーショナル データベースである MySQL を使用することをお勧めします。 。
MySQL の最適化
ストレージ エンジンとして InnoDB を選択
大規模な製品データベースには信頼性と同時実行性に対するより高い要件があり、InnoDB がデフォルトですMySQL ストレージ エンジンは MyISAM よりも優れた選択肢です。
データベース構造を最適化する
データベースのスキーマ、テーブル、フィールドを整理して I/O オーバーヘッドを削減し、関連するアイテムをまとめて保存し、データ量が増加した場合に備えて事前に計画します。パフォーマンスを高いレベルで維持できます。
データ テーブルは、占有するスペースを最小限に抑えるように設計する必要があり、テーブルの主キーはできるだけ短くする必要があります。 · InnoDB テーブルの場合、主キーが配置されている列は各セカンダリ インデックス エントリでレプリケートできるため、多くのセカンダリ インデックスがある場合、短い主キーによって多くのスペースを節約できます。
クエリのパフォーマンスを向上させるために必要なインデックスのみを作成します。インデックスを使用すると検索が容易になりますが、挿入および更新操作の実行時間が長くなります。
InnoDB の ChangeBuffering 機能
InnoDB は、補助インデックスの維持に必要なディスク I/O を削減するチェンジバッファリング構成を提供します。大規模なデータベースでは、セカンダリ インデックスを最新の状態に保つために、多数のテーブル操作と大量の I/O が発生する可能性があります。関連するページがバッファ プールにない場合、InnoDB のchangebuffer はセカンダリ インデックス エントリへの変更をキャッシュするため、ディスクからページをすぐに読み取ることができないために発生する時間のかかる I/O 操作が回避されます。ページがバッファ プールにロードされると、バッファされた変更がマージされ、更新されたページが後でディスクにフラッシュされます。これによりパフォーマンスが向上し、MySQL 5.5 以降で使用できます。
InnoDB ページ圧縮
InnoDB はテーブルのページレベルの圧縮をサポートしています。データ ページが書き込まれるとき、特定の圧縮アルゴリズムを使用してデータ ページが圧縮されます。圧縮されたデータは、ホールパンチ機構によってページの終わりにある空のブロックを解放してディスクに書き込まれます。圧縮が失敗した場合、データは変更されずに書き込まれます。通常、インデックスがデータベースの合計サイズの大部分を占めるため、テーブルとインデックスが圧縮されます。圧縮によりメモリ、I/O、または処理時間を大幅に節約でき、パフォーマンスとスケーラビリティを向上させるという目的を達成できます。また、メモリとディスク間で転送されるデータ量も削減されます。 MySQL5.1 以降のバージョンでは、この機能がサポートされています。
ページ圧縮は共有表スペース内の表をサポートしていないことに注意してください。共有表スペースには、システム表スペース、一時表スペース、および通常の表スペースが含まれます。
バッチ データ インポートの使用
主キーで並べ替えられたデータ ソースを使用してバッチ データをインポートすると、データ挿入プロセスを高速化できます。そうしないと、順序を維持するために他の行の間に行を挿入する必要が生じる可能性があり、これによりディスク I/O が増加し、パフォーマンスに影響が生じ、ページ分割が増加する可能性があります。また、自動コミット モードをオフにすると、挿入のたびにディスクへのログのフラッシュが実行されるため、これも有益です。一括挿入中に一意キーと外部キーのチェックを一時的に変更すると、ディスク I/O が大幅に削減される可能性があります。新しく作成したテーブルの場合、一括インポート後に外部キー/一意キー制約を作成するのがベスト プラクティスです。
データが安定したサイズに達するか、テーブルが増加して数十メガバイトまたは数百メガバイトが追加されたら、OPTIMIZETABLE ステートメントを使用してテーブルを再編成し、無駄な領域を圧縮することを検討する必要があります。再編成されたテーブルのフルテーブルスキャンでは、必要な I/O が少なくなります。
InnoDB ディスク I/O の最適化
InnoDB バッファ プール サイズを増やすと、ディスク I/O 経由ではなくバッファ プールからクエリにアクセスできるようになります。システム変数 innodb_flush_method を調整して、バッファ クリア インジケーターが最適なレベルに達するように調整します。
MySQL のメモリ割り当て
MySQL に十分なメモリを割り当てる前に、さまざまな領域での MySQL のメモリ要件を考慮してください。考慮すべき主な領域は次のとおりです。 同時接続 - 多数の同時接続があると、並べ替えテーブルと一時テーブルに大量のメモリが必要になります。この記事の執筆時点では、3000 の同時接続を処理するデータベースには 16 GB ~ 32 GB の RAM で十分です。
メモリの断片化により、メモリの約 10% 以上が消費される可能性があります。 innodb_buffer_pool_size、key_buffer_size、query_cache_size などのキャッシュとバッファは、割り当てられたメモリの約 80% を消費します。
毎日のメンテナンス
低速クエリ ログを定期的にチェックし、キャッシュを効果的に使用してディスク I/O を削減するクエリ メカニズムを最適化します。テーブル全体のスキャンを実行するのではなく、最小限の行をスキャンするように最適化します。
DBA によるパフォーマンスのチェックと分析に役立つその他のログには、エラー ログ、一般クエリ ログ、バイナリ ログ、DDL ログ (メタデータ ログ) などがあります。
キャッシュとバッファを定期的にフラッシュして断片化を軽減します。 OPTIMIZETABLE ステートメントを使用してテーブルを再編成し、無駄になる可能性のある領域を圧縮します。
推奨チュートリアル: "PHP" "PHPCMS チュートリアル"
以上がPHPCMS にはどのデータベースが適していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。