2012-03-04 5 views
0

まず、私は、メモリを使って各ユーザの最新の「ユーザ更新」レコードを保存することを考えています。
私はMySQLが初めてです。メモリにテーブルを作成するにはどうしたらいいですか?
公式ウェブサイトでは、テーブルを作成するときにENGINE = MEMORYを設定できると言われています。しかし、この文書では、メモリ内のこれらのテーブルは、常に読み込み用であり、書き込み用ではないと主張しています。
MySQLを使ってリングバッファを実装することについての考え方

私はそれをどうするか考えていません。

私は数日間この問題に遭遇しています。私は仮想プライベートサーバを使用していないので、Memcacheと任意のPHP拡張モジュールをサーバにインストールすることはできません。私ができることはhttpdocsフォルダ内のスクリプトとファイルを転送することです。また、データを保存するためにフラットファイル私はバッファ/キャッシュとして、私は書き込み/サーバーのファイルディレクトリに拒否されたアクセス許可のためにファイルを作成することができないことがわかりましたが、私はこの許可を変更することはできません。
MySQLを使用してバッファリングするだけで済むかもしれません。誰かが私にいくつかのヒントを与えることを願っています。

ありがとうございます。

p.s.私は、freshmeat_linux/Linux] Apacheサーバを使用してPHPを実行しているMySQLのDBとして。

+0

あなたがしようとしていることをよりよく説明できますか? – Brad

+0

実際に私のiPhoneアプリケーション用のサーバーサイドスクリプトを書いています。このアプリケーションはウェブサーバーに定期的にデータを送信します。これらのデータはMySQL DBに保存されますが、最新のデータを各ユーザから30個のデータをブラウザに保存して、ユーザの最近のデータに高速にアクセスさせることもできます。 – dannail

+0

これを要求するのに十分なユーザーがいる場合、提案する方法では、これをスケールするのに十分なメモリがありません。適切なインデックスを作成し、これを通常のテーブルで行います。 – Brad

答えて

0

ENGINE = MEMORYテーブルは、読み取りまたは書き込みの両方に使用できます。

の注意する唯一のものは、ときにサーバーがクラッシュしたメモリテーブル内のすべてのデータが消えていること、(あなたは、メモリ内のテーブルのために予想されるように。)など、再起動、オフにされ

+0

サーバ/サーバのクラッシュをリブートすると、メモリ内のテーブルは消去されますが、削除されません。 – dannail

+0

@ user988988テーブルスキーマはテーブル自体と一緒には保存されないため、テーブル定義は(メモリに格納されているだけではないので)保存されます。 – Amber

0

あなたは本当にMySQLのMEMORYエンジンについて注意深く読むべきです。データはRAMに保存されるため、サーバの電源が切れたりリブートされたりすると、RAMがクリアされ、データが消去されます。 MEMORYテーブルは最もアクセスしやすいMySQLのテーブルタイプでなければなりませんが、一時的なデータしか格納されません。

私が正しく理解していれば、PHPから生成された何らかのデータの静的キャッシュを作成しようとしていますか?最も簡単な方法は、HTMLまたはJSのwwwディレクトリに固体ファイルキャッシュとして書き込むことです。あなたのディレクトリを書き込み可能にすることができないなら、MySQLに保存するのも良いでしょうが、それが実際に役立つ場合に限ります。

キャッシュデータの考え方は、SQLクエリを減らし、ディスクI/Oを減らし、コード生成を減らすことです。しかし、MEMORYテーブルを使用するとメモリ使用量が多すぎます。通常のMyISAMテーブルにそれらを保存しても大丈夫ですし、あなたに多くのバックグラウンド作業を安全にしてください。

ただし、考慮すべき2つの点があります。1、アクセス時にキャッシュが存在しない場合は1。キャッシュが最新である場合、2。

何らかのキーを使用するとよいでしょう。そうすればPHPはキャッシュされた日付を最初にチェックし、存在しない場合はキャッシュを生成して表示したり、キャッシュを直接表示したりします。