2011-12-23 4 views
4

ビルドに関するアドバイスを探しています:レコードを作成、更新、削除するPHPアプリケーションがありますが、これは従来の非SQLベースのデータベースに緊密に統合されています。多くのDB呼び出しをやり始めると、実際には非常に遅くなります。 私はこれをより多くのバックグラウンド体験にして、ユーザーが何かを作成または編集したときに、すべての変数、配列、およびオブジェクトをMySQLデータベースに書き込む必要があり、その後バックグラウンドスクリプトを読み込みこれらのレコードを処理して、要求をレガシーデータベースに処理します。PHP-MySQLのバックグラウンドタスクの作成についてのアドバイス

私はタスクを追跡するテーブルと、変数、オブジェクト、配列、およびそれらの値のすべてを追跡する別のテーブルが必要です。

ここで私は第二テーブルのDB構造がなければならないであろう考えていたものです。

  • varが配列またはオブジェクトであれば格納する列
  • TASK_IDを格納するための列、単純なvarの場合はNULLを返します。
  • アレイ/オブジェクトの名前を格納する列var。
  • オブジェクトの場合はそのオブジェクトの型を格納するための列。
  • アレイ/オブジェクトグループIDを格納する列。オブジェクトの単純VAR、方法または名前の名前を格納する
  • カラム(varsのものを追跡するためのオブジェクト/アレイに属する)/配列
  • カラムvarの値を格納する
  • ここで

は、いくつかの例のようになります。

1 | NULL  | NULL  | NULL   | NULL | 'foo'  | 'bar' 
1 | 'array' | 'foo_array' | NULL   | 1 | 'foo'  | 'bar' 
1 | 'array' | 'foo_array' | NULL   | 1 | 'foo2'  | 'bar2' 
1 | 'object' | 'foo_obj' | foobar_object | 2 | 'foo_method' | 'bar' 
1 | 'object' | 'foo_obj' | foobar_object | 2 | 'bar_method' | 'foo' 

これは非常に複雑なアプローチのように見えるのか?私は狂って、これを考えていますか?誰かが私がこれにアプローチすべきより良い方法を考えることができますか?

ありがとうございました。

+0

キューが処理されるまでユーザーのやりとりがデータベースに書き込まれないため、このアプローチの方が経験が悪化する可能性があります。移行できない理由は何ですか? –

答えて

3

利用serialize()

それは、特別にフォーマットされた文字列を生成します(あなたのデータベースに格納することができます)。文字列はunserialize()が元のphp値に変換できるという点で特別です。これは、変数の型、値、および構造を維持します。カスタムオブジェクトと多次元配列は問題ありません。

あなたはまだdbテーブルの一部が必要ですが、これはあなたのために多くの作業を行い、とてもうまく行います。

+0

私はシリアライズしたことがありません。あなたは精巧にお考えですか? – Slowfib

+0

あなたはちょうど私の心クリスを吹き飛ばした!ありがとう、これは明らかに私が予想以上に簡単になります! – Slowfib

1

私は主キー(task_idの可能性があります)と変数のシリアル化されたハッシュ(またはおそらくjsonエンコード)を格納する列を持つテーブルを作成します。タスクを追跡する元のテーブルにこれを保存することもできます。 (1)無署名欄は、私たちは家の中でこれを行うと、我々はちょうどtinyint型を使用

待ち、 処理、 が完了し、かつ エラー

:私はのための値でステータス列を持つことになり、そのテーブルを想定しています。タスクが作成、開始、および終了したときに、タイムスタンプフィールドまたは3つを追加することもできます。一度あなたが圧倒されると、それはまっすぐ簡単です。

+0

正確には、ステータスのIDとその行を特定するためのいくつかのものがあります。そして確かに、あなたはそうです、私はおそらく、このデータのすべてに対して1つのテーブルしか必要としません。なぜあなたは変数のシリアル化されたハッシュを保存しますか?なぜそれをそのまま保管しないのですか?ちょうどセキュリティのために? – Slowfib

+0

私は通常、それをより簡単に解析することができるようにハッシュとして保存し、無限の量のデータを格納することができます。いくつかのタスクは2つの変数を必要とするかもしれませんし、他のものは50を必要とするかもしれません。ハッシュを使って、私はすべての情報を単一の列に格納することができます。 – mylesmg

関連する問題