心の中でマルチプロセスの同期化、大容量データの
背景:同社のユーザーIDが不完全だったため、ユーザーマーク一度同期のグループからのデータを必要とするので、ユーザ・データ・ソースは、150万、600万のオーダーのグループユーザのオーダーのマイクロ文字は、あります
グループは、プログラムは、クエリインターフェイスを切った確定、同時アクセスの頻度が、それの大きさの順に、限定されるものではなく、我々は更新するように、ユーザーの身元を照会するために、同社のユーザーをトラバース
プロジェクトはlaravelを使用して、私は、実行するためのオープン15のプロセスをコマンドラインスクリプトを書きました
時間のPHPのマルチプロセスpcntl_forkを使用しているため
コアのコードは次の通りであります:
主なプロセスは以下のとおりです。
まず、各サブプロセスにメインプロセス割り当てのユーザーID、子プロセスをforkした後、ここに保存するRedisのキューを使用した、ポップキューが子の割り当てられたユーザーIDの範囲を取得し、その後、ライブラリアセンブリ情報要求グループにAPIをチェックし、戻り値に基づいてユーザを指定。
LaravelパッケージRedisのために与えられ、DBはシングルトン、すべての複数のプロセスに多くのお金とRedisのDBを使用していますされています:
Redisの:エラーサーバーからのラインを読みながら、
mysqlの:アウトオブオーダーパケット。予想1は19を受信しました
ああ、それはマルチプロセスは、同じ接続に起因する単一場合、溶液を読み取ります。
Redisの:ネイティブPHPのRedisの接続の使用:
$ Redisの=新しい\ Redisの(); $ RE1 = $ redis->接続(ENV( 'REDIS_HOST')、ENV( 'REDIS_PORT')); $ RE2 = $ redis-> AUTH(ENV( 'REDIS_PASSWORD'));
mysqlの:使用してパージをlaravelとreconnetcを再接続します
DB::purge('mysql'); DB::reconnect('mysql');
多线程大批量数据问题解决^_^