2

1 つのテーブルのみを含む巨大な MS SQL DB があります。このテーブルは非常にシンプルで、選択、挿入、削除のみを行います。結合または更新操作はありません。さらに、現在のアーキテクチャでは、挿入/削除操作は単一のホストから行われます。

DB クエリは非常に遅く、たとえインデックスを追加するのが難しくても、十分には役に立ちません。使用できる小規模なホストの数に制限がないため、分散 DB ソリューションへの移行を考えています。ただし、クエリ インターフェースを可能な限り現在と同じに保ちたいと考えています。

  1. 私たちのニーズに最適なものは何ですか?
  2. == x の形式のクエリのペナルティはどうなりますか
  3. どうすればこの転送を行うことができますか? もちろん、最小限の DB ダウンタイムが望ましいですが、管理できます (BI 情報を保存します)。
  4. Javaアプリケーションからアクセスしているため、JDBCを使用していますが、どのアプリケーションがうまく機能しますか?
  5. ドキュメント指向のデータベースが必要だと私が理解していることから、それは正しいですか?

フィールドごとに多くのクエリがあり、それらのいくつかのキーを維持しています。より重要なものは id といくつかの日付フィールドです。キーによるクエリだけでなく、すべてのフィールドに対するクエリがあります。多くの列を持つ大きなテーブルを維持しています。おそらく、HIVE は私たちが望むソリューション、SQL クエリを提供していますが、分散 DB パフォーマンスを備えていますか?
挿入と削除のパフォーマンスはそれほど重要ではありません。長いクエリは、現時点で私たちを悩ませているものです。

ありがとう!

4

3 に答える 3

1

現在の RDBMS に役立つ 2 つのオプションがあります。

  • 情報を分割できますか?情報を複数のテーブルに分割できる自然キー (ユーザー名、ユーザー ID、時間 - 月/日/時間など) はありますか? テーブルのサイズが大幅に縮小されるため、これ自体で大きなメリットが得られます。私はこれを数回採用して成功しました。これは、DB へのアクセス方法が変わることを意味することに注意してください。すべての CRUD 操作でシャードを考慮する必要があり、集計メソッドは複数のテーブルで実行する必要があるため、より複雑になります。
  • ある種のレプリケーションを使用していますか? あるサーバーへの書き込みと別のサーバーへの書き込みを分割すると、パフォーマンスが向上するはずです。

どのデータベースがあなたに適しているかについてより良い回答を得るために、スキーマと使用法に関する詳細情報を提供してください。主キーのみでクエリを実行しますか、それともフィールドでクエリを実行しますか? フィールドにインデックスを付ける場合は、ドキュメント指向データベースが適しています。繰り返しますが、それは情報の総量に依存します。一部のデータベース (MongoDB など) は、処理できる情報量が制限されており、シャーディングについても推奨されています。一般的なデータベースはすべて Java をサポートしていますが、JDBC はサポートしていません (リレーショナルがないため...)

移行に関しては、2 段階のアプローチをお勧めします。

  1. 現在の情報をダンプし、(変換後に) 新しいデータベースに挿入します
  2. Java コードで、新しいデータを RDBMS と新しいデータベースの両方に挿入するコードを DAO に追加します。きれいなカットオーバーを取得するのは難しいかもしれませんが、時間ベースのしきい値を設定すると簡単になります.

最後に 1 つの提案 - VoltDBのような新しい SQL データベースを調べましたか?

編集

あなたが書いたことに基づいて、私は2つのいずれかを提案します:

  • MongoDB や CouchDB などのドキュメント指向データベース。これにより、主キーだけでなくフィールドにインデックスを付けることができます。さらに、Couchbase は数週間後にCouchConf-Israelを開催するので、助けを求めることもできます (ヒット アドバイスの一時的な性質については申し訳ありません...)。
  • HBase などの列指向データベースですが、テーブルの主キーのみを検索できるため、フィールド インデックス用のテーブルを追加する必要があります。

Hive は、Hadoop の map-reduce メソッドを記述するための優れた方法であり、パフォーマンスの向上を保証するものではないことに注意してください。

私もShai Bergerに同意します.1つの大きなテーブルはデザインの匂いのように聞こえます. あなたはそれを破ることができますか?

于 2012-11-18T11:15:09.607 に答える
0

テーブルが断片化されている可能性があります。別のサーバーにエクスポートおよびインポートして、同じクエリを実行してみてください。それらがより速く実行される場合、それは断片化される可能性があります。

于 2012-11-17T09:30:52.997 に答える
0

Memcachedを試しましたか? データベース インフラストラクチャを変更せずに、RDBMS に対して素晴らしいことを行います。つまり、1 つのクエリ パターンに応じて、2 倍から 10 倍のパフォーマンス向上が期待できます。Memcached クライアントは、すべてのプログラミング言語とプラットフォームで利用可能

于 2012-11-18T14:16:08.407 に答える