2012-02-09 7 views
0

大規模なデータベースにアクセスするには非常に時間がかかるという問題があります。正規化され、多数の結合が必要なためですたった今)。しかし、私は書き込み時間/潜在的な書き込みの機会に気にしないし、分析のためにデータベースが高速であることを必要とする誰かが、分析に適しているデータベーススキーマと、書き込みアクセス速度が非常に高速なため、データベーススキーマ

など。テーブル:1つのテーブルには静的な製品情報があり、テーブル2にはその製品が購入/閲覧されたすべてのインスタンスが含まれています。私の仕事の多くは、特定のアクションが実行された特定の製品を見つけることです。

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

+0

誰も、各製品の1つのテーブルを作成することをお勧めしますか?そのすべての操作/金額が含まれていますか? – 0fnt

答えて

0

スキーマをそのまま、つまり「正しい」ように保ちますが、データのバージョンを完全に非正規化(つまり、レンダリングの準備ができている)のtext search engineに設定します(例:lucene)。

テキスト検索エンジンは、更新機能または参加機能を提供していませんが、FASTです!あなたは自分のためにそれを見るまでにどれくらいの速さを信じませんが、数ミリ秒のオーダーになります。

inverted indexを使用しているため、テキスト検索エンジンは非常に高速です。私はそれらを数回実装しました。そして、それは常に価値がありました。実際のデータが変更されるたびに、テキスト検索エンジンで影響を受けるものをすべてインデックスに追加するだけです。

+0

ありがとう、確かに非常に素晴らしい解決策。試してみる。しかし、一部のフィールドがソートされているという事実は考慮されません。また、ニックピックではなく、間違いなく恩知らずではありませんが、データサイズ、クエリの種類などについて何も言わずに何秒も何も言わないのは間違いありません! お返事ありがとうございました。人々は答えが来るようにしてください。 – 0fnt

+0

また、私は数字の倍数をたくさん持っています、それは素晴らしいプレーですか?また、速い比較のために索引付けされた数値フィールドを持つdbよりも高速であることを簡単に教えてください。 – 0fnt

+0

数ミリ秒の時間は、通常のクエリの標準的な応答時間です。 doubleについては、もしあなたが[solr](http://lucene.apache.org/solr/)をチェックアウトしているなら、luceneの上にあるJavaのレイヤーで、基本的なJavaの型を保存して取り出すことができますフィールド。検索は、すべてのデータタイプの正確な、部分的な、および範囲にすることができます。また、緯度/経度の検索を直接サポートしています。それは本当に素晴らしいです。 – Bohemian

1

「正規化」は必ずしも「たくさんの結合を必要とする」という意味ではありません。しかし、代理キー(ID番号)を使用すると、通常になります。

ナチュラルキーを持つものにID番号を使用せずに5NFに正規化してテストデータベースを構築します。たとえば、国(ISOコードを使用)のID番号、州、郵便番号、カテゴリなどはありません。

この種の構造は、時間と空間のトレードオフを実装します。特定のポイントまで、特定の条件下では、「キー」情報(咳)が自然のキーに運ばれることが多いため、自然キーはサロゲートよりも高速に実行されます。だからあなたはそれに行くために参加する必要はありません。しかし、I/Oが少なくて済むので、サロゲート・キーの方が高速で、ページに収まる行が増えます。あなたは、そのポイントがどこにあるか、そしてあなたがそのポイントで生活できるかどうかを調べるためにテストする必要があります。

関連する問題