[解決済み] Googleが使用しているデータベースは何ですか?
質問
オラクルやMySQLなど、自分たちで構築したものなのでしょうか?
解決方法は?
ビッグテーブル
Bigtableは分散型ストレージです。 構造化データを管理するためのシステム(Googleが構築)。 に拡張できるように設計されています。 ペタバイト級の大容量データを 数千台のコモディティサーバー
Googleの多くのプロジェクトは、データを Bigtableは、Webインデックスを含む。 Google Earth、Google Financeなどです。 これらのアプリケーションは非常に Bigtableに要求されるものは、以下のように異なります。 データサイズ(URLからWebまで)の点で ページ、衛星画像)、そして レイテンシー要件(バックエンドから 一括処理からリアルタイムデータ を提供します。)
このように様々な Bigtableは、このような要求に対し、成功裏に 柔軟で高性能な これらすべてのGoogleのソリューションに 製品です。
一部の機能
- 高速かつ超大規模なDBMS
- は、疎な分散型多次元ソートマップであり、行指向と列指向の両方の特徴を持つデータベースです。
- ペタバイト級に拡張できるよう設計されている
- 数百台、数千台のマシンにまたがって動作する
- マシンを追加すれば、再設定することなく自動的にリソースの利用を開始することができます。
- 各テーブルは複数のディメンションを持つ(そのうちの1つは時間のフィールドで、バージョン管理を可能にする)。
- テーブルを複数のタブレットに分割し、GFS (Google File System) に最適化。
アーキテクチャ
BigTableはリレーショナル・データベースではありません。結合をサポートしないし、SQLのようなリッチなクエリもサポートしない。各テーブルは多次元スパースマップである。テーブルは行と列で構成され、各セルはタイムスタンプを持つ。一つのセルに対して、異なるタイムスタンプを持つ複数のバージョンが存在することがある。タイムスタンプは、「このWebページの'n'バージョンを選択する」「特定の日時より古いセルを削除する」といった操作を可能にする。
巨大な表を管理するために、Bigtableは表を行の境界で分割し、タブレットとして保存しています。タブレットは200MB程度で、1台あたり100個程度のタブレットを保存しています。この設定により、1つのテーブルのタブレットを多くのサーバに分散して保存することができます。また、きめ細かな負荷分散も可能である。あるテーブルが多くのクエリーを受けた場合、他のタブレットを流したり、忙しいテーブルをそれほど忙しくない別のマシンに移動させたりすることができます。また、あるマシンがダウンした場合、タブレットを他の多くのサーバーに分散させ、任意のマシンに対するパフォーマンスの影響を最小限に抑えることができます。
テーブルは、不変のSSTablesとログの末尾(マシンごとに1つのログ)として保存されます。マシンのシステムメモリが不足すると、Google独自の圧縮技術(BMDiffとZippy)を使っていくつかのテーブルを圧縮する。小圧縮はいくつかのテーブルを含むだけであるが、大圧縮はテーブルシステム全体を含み、ハードディスクのスペースを回復する。
Bigtableのタブレットの位置はセルに格納されている。特定のタブレットの検索は、3層構造で処理される。クライアントは1つしかないMETA0テーブルへのポイントを取得します。META0テーブルは、検索対象のタブレットの位置を含む多数のMETA1テーブルを記録している。META0 と META1 の両方がプリフェッチとキャッシュを多用し、システムのボトルネックを最小限に抑えています。
実装方法
BigTableは Googleファイルシステム (GFS)は、ログファイルやデータファイルのバッキングストアとして使用されます。GFSは、テーブル・データを永続化するために使用されるGoogle独自のファイル形式であるSSTablesのための信頼性の高いストレージを提供します。
BigTableが重宝しているもう一つのサービスが 太った 高可用性、高信頼性の分散型ロックサービスです。Chubby は、クライアントがロックを取得し、場合によってはメタデータと関連付け、Chubby に keep alive メッセージを返すことでロックを更新することができる。ロックは、ファイルシステムのような階層的な名前構造で保存されます。
3つの主要な サーバータイプ Bigtableのシステムで注目される
- マスターサーバー:タブレットをタブレットサーバーに割り当て、タブレットの所在を把握し、必要に応じてタスクを再分配します。
- タブレットサーバー:タブレットの読み取り/書き込み要求を処理し、サイズ制限(通常100MB~200MB)を超えたタブレットを分割します。タブレットサーバーが故障した場合、100台のタブレットサーバーがそれぞれ新しいタブレットを1台ずつピックアップし、システムは回復します。
- ロックサーバ:分散ロックサービスChubbyのインスタンス。BigTableでは、書き込みのためにタブレットを開く、同時に複数のアクティブなマスターが存在しないようにする、アクセス制御をチェックするなど、多くの動作でロックの取得が必要です。
Googleの研究論文からの例。
テーブルのスライスの例 はウェブページを保存します。行の名前は 逆方向のURL . コンテンツ列 ファミリーには ページコンテンツ であり、かつ アンカーカラムのファミリーには アンカーテキスト を参照している ページになります。CNNのホームページを参照しているのは スポーツ・イラストレイテッド誌と MY-lookのトップページのため、この行は という名前の列が含まれています。
anchor:cnnsi.com
そしてanchor:my.look.ca
. 各アンカーセル には 1バージョン コンテンツ欄 があります。 3つのバージョン タイムスタンプでt3
,t5
およびt6
.
API
BigTableの代表的な操作は、テーブルやカラムファミリーの作成と削除、データの書き込み、行からのカラムの削除です。BigTableはこの機能をアプリケーション開発者にAPIとして提供しています。トランザクションは行単位でサポートされますが、複数の行キーにまたがるトランザクションはサポートされません。
以下は 論文PDFへのリンク .
そして、ここには GoogleのJeff Deanがワシントン大学で講演しているビデオです。 Googleのバックエンドで使用されているBigtableコンテンツ・ストレージ・システムについて説明しています。
関連
-
解決策: テーブルの定義が正しくありません。
-
01. プロシージャの結果セットを持つ一時テーブルへのSELECT INTO
-
アプリケーションから DB2 SQL Error が報告され続けます。SQLCODE=-302, SQLSTATE=22001, SQLERRMC=null, DRIVER=4.17.29
-
[解決済み] ...値に挿入する ( SELECT ... FROM ... )
-
[解決済み] ATTACHで開いたSQLiteデータベースファイルのテーブルを一覧表示するにはどうすればよいですか?
-
[解決済み] PostgreSQLデータベースの別サーバーへのコピー
-
[解決済み] パスワードをデータベースに保存する最適な方法【終了しました
-
[解決済み] SQLデータベースのテーブルでn番目の行を選択する方法は?
-
C#でExcelを読み込むとエラーが発生します。外部テーブルが期待された形式ではありません。
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
この操作を行うには、少なくとも1つのSUPER権限が必要です。
-
MySQL - エラーです。executeQuery() でデータ操作ステートメントを発行できません。
-
Hibernateでhibernate.propertiesが見つからない問題とデータベース方言の更新の問題
-
解決方法 テーブルの定義が正しくありません。自動列は1つだけで、キーとして定義する必要があります。
-
ビューの作成 SQL: SQL Server でのビューの作成
-
MySql への JDBC 接続エラー com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException.MySQLSyntaxErrorException: 不明なデータベース 'test'
-
mysqlのエラーです。1406, データが長すぎてカラムに入りません
-
DB2におけるNULLおよびNULL処理
-
[解決済み] PostgreSQLデータベースの別サーバーへのコピー
-
[解決済み] postgresql のセッション/接続を切断する