2016-05-15 17 views
0

私は800 000の行を抽出する必要があります(実際には1、さらに1.5万行になる可能性があります)。 第2ステップは、シリアル化されたデータとしてそのデータをRedisキャッシュに挿入することです。MySQLから大量のデータを取得しています。 Redisキャッシュに挿入する。 PHPのメモリ制限を増やすことができません

私の問題は次のとおりである:Xバイトの

  1. 可メモリサイズが消耗している、しかし...キーは、私は変更もできないということです。

  2. 私は、MySQL DBからデータを部分的に取り出すことができます。しかし、の2番目のステップに問題があります。今まで私はRedisのデータをString型(MySQLデータを持つ配列のPHP配列)に格納していました。まだ私は、取り込んだデータの各部分をどのように正しく付加するのか分かりません。 (シリアル化されたデータを取得し、シリアル化を解除して、データの新しい部分を追加し、それを再びシリアル化するのは愚かです)。

大量のデータ操作の経験がありますか?私はそれをどう扱うか分かりません。

してください。 :)

よろしくお願いいたします。

+0

私は理解している場合、私は見てみましょう。サーバーのRAMのdbから800k行をロードしようとしていますか? – NoImaginationGuy

+0

@osnapitzkindle明確にするには:800k行を管理しようとしています。それは一束として積み込まれなければならない。このプロセスは、誰かがmysqlにデータを入れることです。私は赤ちゃんにそれを置かなければならない。 Redisからデータを取得して何かをしている他の人... –

答えて

0

あなたが作成したコンテンツをredis SETコマンドとしてファイルに入れ、次にredis-cli --pipeでファイルを実行します。次のリンクを参照して、redis mess mess挿入データファイルを表示します。

redis mess insertion

<?php 
while ($line = mysqli_fetch_assoc($result)) { 
    $data['data'] = $line['somekey']; // here generate the desired data 
    $data['key'] = 'thekey'; // make the data key 
    $redisCommnand = 'SET '.$data['key'].' '.$data['data']; // here you create the redis insert command line someDataKey 
    file_put_contents('/tmp/data.txt', $redisCommand, FILE_APPEND);// appending the command to redis command file 
} 


// exec command to run the file 
exec('cat data.txt | redis-cli --pipe'); 
// consider removing the data.txt file 
// unlink('/tmp/data.txt'); 
関連する問題