巨大なデータベースを操作することについて何を知る必要がありますか?

StackOverflow https://stackoverflow.com/questions/3711633

質問

私は、具体的な問題/解決策/アドバイス/ベストプラクティス(言葉のために私を罰しないでください)を知りたいです。

巨大な私は、数百万の列やデータベースを備えたテーブルがあるデータベースを含むデータベースを意味します。

プラットフォーム指向の答えも素晴らしいでしょう。

役に立ちましたか?

解決

いくつかのアイデア

  • 特定のデータベースエンジンの詳細、それがどのように機能するかを学ぶ

  • クエリを最適化する方法(ヒント、実行計画)

  • データベースを調整する方法(インデックスだけでなく、物理ストレージと表現、OS統合)。

  • 一時的なテーブルのような「トリック」をクエリして、再利用できる一時的な結果を保存する、

  • パフォーマンスの改善のための非正規化の必要性を評価する方法

  • ボトルネックを識別するために、データベースのプロファイリングツールを使用する方法。

他のヒント

プロダクションDBAからのいくつかのアドバイス(私の経験はMS SQLですが、これらは他のプラットフォームに適用されるはずです):

  • メンテナンスはaになります 重要 問題(毎晩のバックアップ、DBCC、毎週の再インデックス/最適化ジョブなど)。合理的な夜間または週末のメンテナンスウィンドウを超えることが非常に簡単です。これは単なるものではありません 技術 問題、それもa 仕事 問題(「どういう意味ですか、最後の良いバックアップからデータベースを復元するのに4時間かかりますか?」)

  • 開発者は、違った仕事をする必要があるかもしれないことを理解する必要があります。 「あなたは私だけができないということです DELETE (500m rows) FROM MassiveTable そして、それが機能することを期待していますか?

もっと考えていると確信しています...

私の最初のアドバイスは、自分が何をしているのかを知っていて、そうでない人を雇うことです。そうしないと、非常に高価な間違いをお勧めします。私の2番目は、適切なプラットフォームハードウェアとソフトウェアを選択することです。詳細は要件に大きく依存します。

SQL Antipatternsに関するこのプレゼンテーションを読むことを強くお勧めしますhttp://www.slideshare.net/billkarwin/sql-antipatterns-strike-back

プレゼンテーションは(はい、私が大いに助けてくれました)、一見行き詰まった状況の解決策を見つけるのに役立ちます。

RDBMは、特に複雑な結合条件が使用されている場合、非常に大きくなった場合、パフォーマンスの低下に苦しむ可能性があります。データベーススキーマは、大量のトラフィックをスケーリングするように設計する必要があります。ほとんどのシステムは負荷の取り扱いにかなり優れていますが、複数のマシンに配布する必要があるデータベースが1つある場合、問題に遭遇することもできます。

データベースのスケーラビリティに対処するために、多くの新しいツールが飛び出しています。最も有望なのはMemcachedで、多くのデータをメモリに保存します。これにより、複数のデータベースサーバー間の同期をより高速にアクセスできるようになります。 NOSQLソリューションの一部は、スキーマを強制しないアーキテクチャを使用して従来のSQLシステムを強化しています。

NOSQLテクノロジーの例には、Cassandra、CouchDB、Google Bigtable、Mongodbがあります。一部の人々は、これらのシステムが「今後のデータ爆発」を管理する上で重要になると誓います。

設計と管理に関する限り、サイズよりも重要なデータベースには2つの側面があります。

1つ目は複雑さです。ユーザーテーブルはいくつありますか?それらのテーブルにはいくつの列がありますか?スキーマに数百のユーザーテーブルがあり、それらのテーブルに1000以上の列があるデータベースは非常に複雑です。半ダースのテーブルを持つデータベースは、ペタバイトのデータが含まれていても、それほど複雑ではありません。

2つ目は、データ共有の範囲です。データベースが、別のプログラミングチームによって開発された6つ以上のアプリケーション間でデータを共有するように構築されている場合、単一のアプリケーションに埋め込まれたデータベースとは非常に異なって設計および管理する必要があります。

データベースの質問のほとんどは、単一のアプリケーションデータベースに関連しています。

すでに言及されていることに加えて、ここに学ぶべきいくつかのことがあります。

テーブルパーティションとテーブル分解の違いを学びます。一部の人々は、パーティション化がより良いサービスを提供するときに、同じ列でテーブルをすべて同じ列ですべて複数のテーブルに分解します。

データのグラフモデルとデータのリレーショナルモデルとの実際の違いを学びます。一部の人々は、外部キーが本質的にポインターと同じであるかのようにデータベースを設計します。彼らが終わらせるのは、リレーショナルシステムのすべての遅さと、グラフシステムのすべての管理性をキャプチャするシステムです。

(注:グラフモデルは、多くの場合、Hiearachicalまたはネットワークモデルと呼ばれます)。

実際のリレーショナルデータベースの設計は、関係的にモデル化されているふりをしているが実際にはグラフモデル化されているデータベースを設計するよりもはるかに微妙で、はるかに価値があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top