2

私は現在Djangoでウェブサイトを構築しており、最大数KBのユーザーバイオスタイルページをホストしたいと考えています。これらのフィールドは必ずしも検索する必要はありませんが、ユーザー名を検索するときに提供する必要があります。

このデータをデータベースに保存すると悪影響がありますか?DB内のリンクを含む静的テキストファイルを使用した場合、サーバーの動作は向上しますか?

4

3 に答える 3

1

それらをDBに保存することができ、おそらくパフォーマンスのボトルネックにはなりません。列タイプがTEXTに設定されていることを確認してください。パフォーマンスの問題を回避するために、MySQLはそのデータを可能な限りインテリジェントに処理します。

于 2012-06-25T01:50:57.640 に答える
0

@Oleksiと@paulsm4で説明されているように、データベースにデータを保存することは、彼らが説明するすべての理由から、有益な場合があります。しかし、彼らはあなたがしたくない理由については言及していませんでした:

  1. クエリの最適化中にBLOBまたはTEXT列が一時テーブルに配置された場合、このテーブルは、メモリ内にあったはずの十分に小さい場合でも、ディスク上に配置されます。したがって、必要であることがわかっている場合を除いて、BLOB列またはTEXT列の選択は避けてください。絶対に避けるべきselect *です(とにかくこれは良い習慣です)。

  2. BLOB/TEXT列はデータベース内に格納されます。比較的静的なコンテンツであると仮定すると、専用の低オーバーヘッドhttpdサービス/キャッシュの背後で静的ファイルとして提供することにより、パフォーマンス/スケーラビリティ/コストの利点を得ることができます。

  3. BLOBがメディアを表す場合、ほとんどの場合、専用のストリーミングサービスの背後に外部に保存することをお勧めします。

  4. コンテンツが変更された場合、データがデータベースに保存されるよりも外部に保存されるときにバージョン管理を組み込む方が簡単です。

  5. BLOB / TEXT列は、テーブルの残りの部分と同じサーバーに格納されます。BLOB / TEXTアクセスは、通常、テーブル/インデックスアクセスとは非常に異なる読み取りパターンを持っています。これは、BLOB / TEXTへのアクセスがバッファキャッシュを汚染し、データベースのパフォーマンスに影響を与えることを意味します。また、テーブル/インデックスアクセスはシーケンシャル読み取りスケジューリングを妨害し、BLOB/TEXTのパフォーマンスに影響を与えます。

もちろん、2と5は、データベースサーバーのパフォーマンス制限に達した場合にのみ適用されます。3と4はかなり特殊なケースです。そして、1は通常、テーブルを分割するか、関連するクエリを書き直すことで解決できます。したがって、ほとんどの場合、これらは適用されません。質問から、これらはあなたの場合にも適用されないように思われます。ただし、「BLOB / TEXTを使用する」という一般的に正しいアドバイスには例外があり、それらが何であるかを理解することは十分に価値があります。

于 2012-06-25T03:43:54.823 に答える
0

あなたの質問に対する基本的な答えは「MySqlにデータを保存する」(外部テキストファイルに対して)です:データベースにデータを保存することは間違いなくここでの最良のアプローチです。

「BLOB」は一般的な用語である可能性があります。その場合、Oleksiは絶対に正しいです(私は彼に+1をマークしましたが、ダウンではありません!)。

しかし、あなたが望む特定のMySqlタイプは確かにTEXTです:

mySqlデータベースにTEXTとして保存すると、多くの利点があります(「パフォーマンス」を含みますが、これに限定されません)。

私が考えることができる外部ファイルにテキストを保存することに利点はありません。

PS:

MySQLでのフリーテキスト検索よりも前の非常に古いバージョンを使用するレガシーPHP/MySQLWebアプリがあります。新しいサーバーに移植できない場合は、テキストに対して「Lucene」のようなインデクサーを実行できるように、すべての「メモ」データを外部ファイルに保存することを真剣に検討しています。しかし、それは規則の例外です。あなたの場合、データベースに保存することがほぼ確実に最良の選択です。私見では...

于 2012-06-25T01:56:34.537 に答える