目次
SELECT id, title,content,date from temp_t where mykey = ' 1'
ホームページ バックエンド開発 PHPチュートリアル mysql テーブル列のレプリケーション、mysql 接続時間、メモリ制御。

mysql テーブル列のレプリケーション、mysql 接続時間、メモリ制御。

Jun 23, 2016 pm 02:10 PM

一時テーブル temp_t とメイン テーブル table1 の 2 つのテーブルがあり、どちらも MyISAM で、それぞれに約 28W のレコードがあります。
Cron は、ネットワークから情報を 1 分ごとに取得するようにスケジュールし、最初にそれを temp_t に保存します (頻繁に書き込みます)。
次に cron は、情報を temp_t からメインテーブル table1 に 10 分ごとにコピーするようにスケジュールします (10 分ごとに頻繁に読み取り、書き込みします) 。

temp_t フィールド id (auto_increment)、title (varchar (200))、content (varchar (500))、date (DATETIME)、mykey (tinyint (1) デフォルト 1、これはコピーされたかどうかを判断するために使用されます。メインテーブル、コピー後 UPDATE は 2)

table1 フィールド ID (auto_increment なし)、title (varchar(200))、content (varchar(500))、date(DATETIME)


28W レコード、各データテーブルは各更新には約 2K ~ 3K のレコードが必要です。
直接コピーすると、MYSQL の接続時間が長すぎて、テーブル 1 がロックするような現象が発生し、テーブル 1 のクエリ時間が大幅に長くなります。最初に temp_t のデータからレコードを読み取り、それを json 配列として保存してから、データを table1 にコピーしたいと考えていますが、場合によっては、「メモリを割り当てられません」というエラーが発生し、サーバー全体がクラッシュします (これは json 配列です)。大きすぎて大量のメモリを占有します)。 PS: php.ini のメモリ制限が 64M に増加しました (しかし、根本的な原因ではなく症状を治療するものだといつも感じています。このようなコピー プロセスはそれほど多くのメモリを必要としません。重要なのは、コードが不合理であるということです) 。

require dirname(__FILE__) . '/../connection.php';mysql_select_db("news",$connextion);mysql_query("SET NAMES utf8");$query = mysql_query("SELECT * FROM temp_t where mykey = '1'");while($rows = mysql_fetch_array($query)){	mysql_query("UPDATE temp_t SET mykey='2' WHERE id='".mysql_real_escape_string($rows['id'])."'");	mysql_query("INSERT INTO table1 (id,title,content,date) values ('".mysql_real_escape_string($rows['id'])."','".mysql_real_escape_string($rows['title'])."','".mysql_real_escape_string($rows['content'])."','".mysql_real_escape_string($rows['date'])."'");}mysql_close($connextion);
ログイン後にコピー


そこで、助けてください。テーブル情報をコピーするためのもっと経済的なコードはありますか? mysql の接続時間を短くし、メモリ消費量を少なくする必要がありますか?皆さん、ありがとうございました。



ディスカッションに返信(解決策)

これら 2 つの文を順番に実行するだけです
INSERT INTO table1 (id,title,content,date) 値

SELECT id, title,content,date from temp_t where mykey = ' 1'

UPDATE temp_t SET mykey='2' WHERE mykey = '1'

わざわざphp転送する必要はありません

temp_tは一時的に保存されているので、転送されたデータを削除してみてはいかがでしょうか?

これら 2 つの文を順番に実行するだけです
INSERT INTO table1 (id,title,content,date) 値
SELECT id, title,content,date from temp_t where mykey = '1'

UPDATE temp_t SET mykey=' 2 ' WHERE mykey = '1'

わざわざphp転送する必要はありません

temp_tは一時的に保存されているので、転送したデータを削除してみてはいかがでしょうか?

temp_t のデータはまだ削除できません。挿入時にタイトルを繰り返さないという別の判断があります (繰り返し挿入を避けるため)
上司によると、このように実行するだけで十分ですか?まだテストしていないので、cron スクリプトを停止する必要があります。
私の経験に基づいて聞きたいのですが、このような 300 MB のデータ テーブルに一度に 2000 ~ 3000 のレコードを挿入すると、このスクリプトの実行にはどのくらいの時間がかかり、どのくらいのメモリを消費しますか? INSERT と SELECT の実行時間を高速化するには、特定の値のメモリを my.cnf に追加する必要がありますか?再度、感謝します。

require dirname(__FILE__) . '/../connection.php';mysql_select_db("news",$connextion);mysql_query("SET NAMES utf8");$query = mysql_query("SELECT * FROM temp_t where mykey = '1'");$jon = array();while($rows = mysql_fetch_array($query)){	$jon['a'] = $rows['id'];	$jon['b'] = $rows['title'];	$jon['c'] = $rows['content'];	$jon['d'] = $rows['date'];	$pjon .= json_encode($jon).',';}mysql_close($connextion);$njso = json_decode('['.substr($pjon,0,-1).']');foreach($njso as $nx){		if($nx->a){		require dirname(__FILE__) . '/../connection.php';		mysql_select_db("news",$connextion);		mysql_query("SET NAMES utf8");		mysql_query("UPDATE temp_t SET mykey='2' WHERE id='".mysql_real_escape_string($nx->a)."'");		mysql_query("INSERT INTO table1 (id,title,content,date) values ('".mysql_real_escape_string($nx->a)."','".mysql_real_escape_string($nx->b)."','".mysql_real_escape_string($nx->c)."','".mysql_real_escape_string($nx->d)."'");		mysql_close($connextion);	}}
ログイン後にコピー


1: まず第一に、一時テーブルが外部から読み取られていないのであれば、なぜ memcache を使用しないのでしょうか。その後、table1 が memcache を読み取って戻ってきます

2:300m は大きくありません。他の文献サイトでは、時計 1 台に 10 GB の費用がかかります。同じコピーが来たり消えたりします。

3: 以前、その会社は 1 つのテーブルに 400 万個のデータが含まれており、一時テーブルから 1 つずつ読み取る方法が使用されていました。すべてをまとめて実行しますが、立ち往生するよりはマシです。


1: まず、一時テーブルが外部から読み取られていない場合は、memcache を使用しないのですか? そして、table1 が memcache を読み取ってそれを返します

メモリが足りないので、memcache がインストールされています。私は nginx サーバー クラスターです。この仮想空間には数十ドルの価値があります...

10G テーブルをコピーするには、my.cnf 内のいくつかの値のサイズを増やす必要がありますか?
300M ウォッチの動作が遅く、頻繁にフリーズするようにいつも感じています。人には天文学的な数字がありますが、頻繁に読み書きする人でもスムーズに仕事を進めることができます。


1: まず、一時テーブルが外部から読み込まれていない場合は、memcache を使用しないのですか? そして、table1 が memcache を読み取って返します。

メモリが足りないので、memcache をインストールします。私は nginx サーバー クラスターで、ここにいます ブロックは数十ドルの価値がある仮想空間です...

10G テーブル レプリケーションの場合、my.cnf 内のいくつかの値のサイズを増やす必要がありますか?
300M ウォッチの動作が遅く、頻繁にフリーズするようにいつも感じています。人には天文学的な数字がありますが、頻繁に読み書きする人でもスムーズに仕事を進めることができます。


その場合、データがどれほど大きくても複雑であっても、一度に 1 つの項目を使用する方が良いでしょう。 1~2秒に1通のメッセージ、1日経っても怖いです。
一度にこんなにたくさん注ぎ出す必要はない、一度に注ぎ出さなければ、大手グループ会社はそんなことはしないだろう。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? Apr 06, 2025 am 12:02 AM

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

PHPのさまざまなエラータイプを説明します(通知、警告、致命的なエラー、解析エラー)。 PHPのさまざまなエラータイプを説明します(通知、警告、致命的なエラー、解析エラー)。 Apr 08, 2025 am 12:03 AM

PHPには4つの主要なエラータイプがあります。1。notice:わずかなものは、未定義の変数へのアクセスなど、プログラムを中断しません。 2。警告:通知よりも深刻で、ファイルを含むなど、プログラムを終了しません。 3。ファタラー:最も深刻なのは、機能を呼び出すなど、プログラムを終了します。 4。ParseError:構文エラーは、エンドタグの追加を忘れるなど、プログラムの実行を防ぎます。

PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

HTTPリクエストメソッド(取得、投稿、配置、削除など)とは何ですか?それぞれを使用する必要がありますか? HTTPリクエストメソッド(取得、投稿、配置、削除など)とは何ですか?それぞれを使用する必要がありますか? Apr 09, 2025 am 12:09 AM

HTTPリクエストメソッドには、それぞれリソースを取得、送信、更新、削除するために使用されるGET、POST、PUT、および削除が含まれます。 1. GETメソッドは、リソースを取得するために使用され、読み取り操作に適しています。 2. POSTメソッドはデータの送信に使用され、新しいリソースを作成するためによく使用されます。 3. PUTメソッドは、リソースの更新に使用され、完全な更新に適しています。 4.削除メソッドは、リソースの削除に使用され、削除操作に適しています。

PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか? PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか? Apr 17, 2025 am 12:06 AM

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

アクション中のPHP:実際の例とアプリケーション アクション中のPHP:実際の例とアプリケーション Apr 14, 2025 am 12:19 AM

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHP 7.4で導入された矢印関数(短い閉鎖)を説明します。 PHP 7.4で導入された矢印関数(短い閉鎖)を説明します。 Apr 06, 2025 am 12:01 AM

矢印関数はPhp7.4で導入され、短い閉鎖の単純化された形式です。 1)=>演算子を使用して定義され、機能を省略し、キーワードを使用します。 2)矢印関数は、キーワードを使用せずに現在のスコープ変数を自動的にキャプチャします。 3)コールバック関数と短い計算でしばしば使用され、コードのシンプルさと読みやすさを改善します。

See all articles