0

だから、私が持っているものを見てください。

プレーン テキスト、タグ付きテキスト、および html としてデータベースに保存される短いテキスト メッセージ。タグ付きテキストの場合、タグは各メッセージに埋め込まれます。たとえば、次のタグ付きメッセージを作成できます。

A [quick] [brown] fox jumps over a [lazy] dog.

Quick、Brown、Lazy - 埋め込まれたタグで、htmlでは太字で表示されます。[犬] などの別のタグを付けることができます。これが起こったので、データベース内のすべてのメッセージをという単語で更新し、どこでもタグにする必要があります。

何千ものメッセージがあるので、必要なメッセージをフィルタリングして更新 (または新しい値を挿入) する必要があります。ユーザーがタグを同時に変更 (および削除) する可能性があることはそのままにしておきます。検索インデックスのようなものを保持し、更新されるメッセージをすばやく見つけるために、これらのニーズに対応する補助テーブルを考えています。もちろん、注文を維持するためだけに、すべての変更は他の複数のユーザーの承認後に適用されます。

検索および更新プロセスをより効果的にするための解決策はありますか、それともここで何か他のものを選択する必要がありますか?

必要に応じて、Ruby + MySQL を使用します。

4

1 に答える 1

0

各メッセージを絶対に更新する必要がある場合は、力ずくで変更する以外に選択肢はありません。数千人しかいない場合は、十分に高速です。ただし、数百万に達すると、おっしゃったように、クエリの最適化を使用したり、バックグラウンド更新スレッドを使用してゲームをプレイしたりしない限り、各メッセージ内のタグを見つける時間が影響し始める可能性があります。(または、ログをサポートするテンポラル データベースに変更します)

タグの数が十分に少ない場合は、単純にタグのリストをテーブルに保持し、各メッセージを取得するときにタグ テーブルを介して各潜在的なタグを渡します (つまり、メッセージ内の各単語について、単語がタグ テーブルにあるかどうかを確認します)。 . メッセージが短い場合、これはかなり迅速であり、タグ テーブルに最適なインデックスを付けて支援することができます。

タグ テーブルの利点の 1 つは、逆インデックスとして機能するメッセージ タグ 1:M テーブルを作成できることです。これにより、クエリ検索が高速化されますが、質問は検索パフォーマンスに関するものではないようです。

于 2012-05-30T03:07:51.117 に答える