1

ユーザーがガーバーファイル(プリント基板フォーマット)をアップロードし、PHPでそのファイル(GCode)をSVGに変換するシステムを作りました。

私は今問題に直面しています、それは実際には建築上の問題です。

SVGをファイルまたはデータベースに保存しますか?

そして、SVGを({name:test、data:SVGFILEGOESHERE})のようなJSONとして返すか、単に.svgとしてレンダリングする必要がありますか?つまり、JSONはビッグデータ構造に対して十分に安全ですか?

編集:

変換されたSVGは、次のようなWebサイトの多くのビューで使用されます。製品ページ、構成ページ...一度だけ表示されることはありません...

主なアイデアは、GCodeをサーバーに送信することです。誰かがそのファイルを要求すると、レンダリングされていない場合は、レンダリングしてSVGをデータベースまたはファイルに保存し、キャッシュを保存して、再回避します。 -同じファイルを何度も処理します。

SVGはajaxで取得され、ページに挿入されてレンダリングされます(ただし、すべてをajaxでロードすると思います)。

サーバーに送信されたファイルは、変更されることはありませんが、削除して再送信することができます...

ありがとう

4

3 に答える 3

6

アップデート

あなたがしていることについては、SVGを別のファイルとして保存し、SVGを画像として返すことをお勧めします(ヒント:header("Content-type: image/svg+xml");PHPの場合)。

ちなみに、The SVG, would be retrieved with ajax, and also rendered with PHP on the page. これは正しくありません。SVGはテキスト/XMLファイルです。PHPはSVGをレンダリングせず、SVGのコードをクライアントに送信するだけです。クライアントマシン、SVGコードを解析し、それをクライアントに表示されるイメージとしてレンダリングするマシンである必要があります。

元の回答

答え:それは異なります。あなたは私たちに続けるために多くを与えていません。

SVGはASCIIテキストであり、HTMLのようなものです。詳細については、こちらをご覧ください。そのため、JSONでSVGファイルを送信することに「間違い」はありません。引用符がエスケープされていることを確認してください。

JSONは大きな構造には適しています。問題はサイズではなく、サーバーからクライアントに送信するのにかかる時間であり、JavaScriptがJSONを解析してSVGを画像としてレンダリングするのにかかる時間です。セットアップがどのようなものか、SVGファイルのサイズはわかりませんが、非常に大きなSVGイメージの場合は、クライアントマシンに時間がかからないように、SVGのみを返す別のリクエストにそれらを配置することをお勧めします。 JSONを解析します。アプリケーションのパフォーマンステストを実行して、ニーズに最適なものを確認する必要があります。

SVGをファイルとして、またはデータベースに保存する場合は、データベース、インデックス作成用のメモリの量とインデックスの作成方法、SQLかNoSQLか、ストレージスペースの量、トラフィックの量によって異なります。サイト上にあるもの、データベースやファイルのバックアップ方法など。人々はデータベースを使用してユーザー画像のサムネイルを保存しているため、SVGファイルを確実に保持できます。それはすべて、データベースの速度と安定性に依存します。個人的には、画像と大量のテキストをハードドライブ上の別々のファイルに保存することを好みます。

于 2012-08-04T23:59:48.077 に答える
1

それは(少なくとも)2つのことに依存します:

  1. データの使用をどのように計画していますか(後で変更できますか?)
  2. サイトが受信するトラフィックの量。

SVGデータを後で変更できる場合は、データベースに保存します。JSONデータはそこで問題ないはずです。

大量のトラフィックが発生すると思われる場合は、適切なキャッシュメカニズムが整っていない限り、個人的にはデータベースに保存しません。MySQLを使用しているかどうかはわかりませんが、MySQLのクエリキャッシュは、大量のデータをキャッシュすることにあまり満足していない可能性があります。

私が個人的に行うことは、SVGをファイルに保存し、データベース内の関連するレコードに基づいて取得できるように保存することです。/uploads/svg/$username/$circuitboardid.svg

多くのユーザー(30,000人以上)がいる場合、svgディレクトリは巨大になり、ファイルシステムによってはフォルダあたりのファイル数の制限に遭遇する可能性があります。

于 2012-08-04T23:57:23.273 に答える
0

これは、phpおよびmySQLデータベースで次のコードセグメントを使用して実現しました。まず、svgは基本的にHTMLと同じようにテキストに格納されることを忘れないでください。また、svgタグは、すべて異なるものであっても、HTMLタグと非常によく似たレイアウトになっています。

データベースへの保存。実際のmySQLInsertcallでは、次のコードセグメントを使用する必要があります。最初に変数に対してこれを実行してから、変数を挿入呼び出しに入れると、機能しないことがわかりました。関数はmySQLステートメントに含まれている必要があります。
mysql_real_escape_string($myValue)

値のテキストボックスへの取得。値がすでにデータベースから取得されており、現在はtheValuesと呼ばれる配列にあると仮定します。基本的にバックスラッシュを削除していますが、事前にhtmlentitiesを使用して正しく表示できることを確認しています。あなたはsvgにバックスラッシュがないので、サーバーが引用符を\ "に置き換える場所で修正されます。svgでバックスラッシュが発生した場合は、置換関数をもう少し賢くする必要があります。
$myValue= str_replace("\\", "", htmlentities($theValues->myValue)); echo $myValue;

上記と同じ理由でページにエコーアウトしますが、htmlentities関数は、svgを処理して画像を表示する代わりに、svgのテキストのみを表示するようにします。これは、Hasのテキストがデータベースに保存された後にsvgを表示するためにのみ必要ですが、表示を損なうことはありません。最初のデータでない場合は、不要な関数呼び出しだけです。
str_replace("\\", "",$myValue)

于 2013-11-27T16:31:36.217 に答える