2012-02-12 2 views
1

これ以上の議論です。大きなデータベースを効率的に検索するにはどうすればよいですか?

私たちはマルチテナントで、数百万行のテーブルを持つシステムを持っています。私たちのUIは、ユーザーがさまざまな検索基準を使用してこれらのテーブルに対して検索を実行できるようにするため、これらの条件を任意に組み合わせることができます。

データベース内のこれらの検索列をすべて索引付けするか、メモリー内の全表をロードしてからフィルタリングすることは現実的ではありません。

誰でもこの問題に取り組むパターン/デザインの正しい方向を指摘できますか?

+0

これはむしろオープンな質問です。実際には、あなたのドメインを理解することなく、私はあなたが範囲を再定義できるかどうか尋ねるでしょう。インデックスを持つ検索をユーザーに実行させるためのUIを作成できますか?ユーザが任意の種類の「アドホック」クエリを実行させるのではなく、ユーザがあなたの要望を話し合い、それに応じてデータとインデックスを調整することができます。 –

+0

例を示します。ユーザーは請求書を検索できます。請求書番号、請求書日付、請求書ジョブ番号、請求書の顧客、請求書のサプライヤ、請求書のステータス(有料、無効など)、請求書支払い日を検索する機能があります。検索のガイドはありません。彼らはcriteraのいずれかを選択/記入して検索することができます – Amitesh

答えて

0

あなたが説明している状況を解決するためのパターンはわかりません。無制限の行数、完全に特別なクエリ、多くの同時ユーザー?これは必須条件ではありません。それは「何か」です。

これは、トランザクションではなくレポートデータベースであると仮定します。データは読み取り専用です。あれは正しいですか?

スタースキーマを持つデータウェアハウスは、慎重に設計されたディメンションに沿ってクエリを処理します。ユーザーはディメンションをロールアップできます(たとえば、時間ディメンションによってユーザーは日、週、月、四半期、年などにロールアップできます)。しかし、そうするロジックはデータベース上で実行され、ストアドプロシージャでコード化されます。

私は、ユーザーが中間層で何百万もの行を必要としているという主張に挑戦します。一度に何百万もの行を取り込むことはできません。 Googleは、一度に1つのクエリから返される何百万ものページを25個返します。

分離された方法で使用され、Excelなどのツールを使用して分析されたデータセットをストリーミングすることができます。しかし、それは私が想像できる最高のシナリオです。

+0

こんにちは お返事ありがとうございます。これは報告システムではありません。それで、ライブ取引も同様に進行しています。また、ユーザーがミルの行を使用することは決してないと言うのは間違いありませんが、私が記述していた問題は、100万行以上のテーブルを照会することでした。この問合せは、必ずしも索引付けされる必要のない複数の異なる列の組合せにすることができます。 – Amitesh

+0

索引なしで100万行の問合せを実行することはありません。そして取引をしている人々も同様に苦しんでいます。あなたはうんざりです。 – duffymo

+0

答えは、ユーザーが非常に多くの基準で検索するための柔軟性を持たないことです。 – Amitesh

関連する問題