Googleはどのデータベースを使用していますか?


370

それはOracleかMySQLか、彼らが自分で作ったものですか?


187
彼は、データベーススタックオーバーフローが使用するものを見つけたいときにGoogleを使用します
flybywire 2009

340
ねえ、彼をバッシュしないでください、私はグーグル検索笑からここに行きました。
Shawn Mclean

141
グーグルで「グーグルのデータベース」を検索した結果のトップがこのページになり、最初のコメントがグーグルを使用することはさらに皮肉なことですか?
Patrick Szalapski、2010

89
@Patrick Szalapskiはスタックオーバーフローの状況のように聞こえます。
Thomas

5
検索する前に、Googleから正しい回答が得られるかどうか疑問に思っていましたが、ここに行きます:P
Abdul Saboor '19年

回答:


581

Bigtable

構造化データ用の分散ストレージシステム

Bigtableは、構造化データを管理するための分散ストレージシステム(Googleが構築)であり、非常に大きなサイズ(数千の商品サーバーにわたるペタバイトのデータ)まで拡張できるように設計されています。

Googleの多くのプロジェクトでは、データをBigtableに保存しています。これには、ウェブのインデックス作成、Google Earth、Google Financeが含まれます。これらのアプリケーションは、データサイズ(URLからWebページ、衛星画像まで)とレイテンシ要件(バックエンドの一括処理からリアルタイムのデータ提供まで)の両方に関して、Bigtableに非常に異なる要求を課します。

これらのさまざまな要求にもかかわらず、BigtableはこれらすべてのGoogle製品に柔軟で高性能なソリューションを提供することに成功しています。

いくつかの機能

  • 高速で非常に大規模なDBMS
  • スパースな分散多次元ソートマップ。行指向データベースと列指向データベースの両方の特性を共有します。
  • ペタバイトの範囲にスケーリングするように設計されています
  • 数百または数千のマシンで動作します
  • システムにマシンを追加して、再構成することなく自動的にそれらのリソースの利用を開始するのは簡単です
  • 各テーブルには複数のディメンションがあります(そのうちの1つは時間のフィールドであり、バージョン管理が可能です)
  • テーブルは、複数のタブレットに分割されることによってGFS(Googleファイルシステム)に最適化されています-テーブルのセグメントは、タブレットのサイズが200メガバイトになるように選択された行に沿って分割されます。

建築

BigTableはリレーショナルデータベースではありません。結合はサポートされず、SQLに似た豊富なクエリもサポートされません。各テーブルは多次元疎マップです。テーブルは行と列で構成され、各セルにはタイムスタンプがあります。異なるタイムスタンプを持つセルの複数のバージョンが存在する可能性があります。タイムスタンプにより、「このWebページの「n」バージョンを選択する」または「特定の日時より古いセルを削除する」などの操作が可能になります。

巨大なテーブルを管理するために、Bigtableは行の境界でテーブルを分割し、タブレットとして保存します。タブレットのサイズは約200 MBで、各マシンで約100タブレット節約できます。この設定により、単一のテーブルのタブレットを多くのサーバーに分散できます。また、きめ細かな負荷分散も可能です。1つのテーブルが多くのクエリを受信して​​いる場合、他のタブレットを流したり、ビジーなテーブルをそれほどビジーでない別のマシンに移動したりできます。また、マシンがダウンした場合、タブレットは他の多くのサーバーに分散されるため、特定のマシンのパフォーマンスへの影響は最小限に抑えられます。

テーブルは不変のSSTableとログの末尾(マシンごとに1つのログ)として保存されます。マシンがシステムメモリを使い果たすと、Google独自の圧縮技術(BMDiffおよびZippy)を使用して一部のタブレットを圧縮します。マイナーコンパクションには数個のタブレットしか含まれませんが、メジャーコンパクションにはテーブルシステム全体が含まれ、ハードディスク領域を回復します。

Bigtableタブレットの場所はセルに保存されます。特定のタブレットの検索は、3層システムによって処理されます。クライアントはMETA0テーブルへのポイントを取得しますが、テーブルは1つだけです。META0テーブルは、検索されるタブレットの場所を含む多くのMETA1タブレットを追跡します。META0とMETA1はどちらもプリフェッチとキャッシングを多用して、システムのボトルネックを最小限に抑えます。

実装

BigTableは、ログおよびデータファイルのバッキングストアとして使用されるGoogleファイルシステム(GFS)上に構築されています。GFSは、テーブルデータの永続化に使用されるGoogle独自のファイル形式であるSSTablesに信頼できるストレージを提供します。

BigTableが頻繁に使用するもう1つのサービスは、可用性が高く信頼性の高い分散ロックサービスであるChubbyです。Chubbyを使用すると、クライアントはロックを取得でき、場合によってはメタデータに関連付けて、キープアライブメッセージをChubbyに送信して更新できます。ロックは、ファイルシステムのような階層的な命名構造に保存されます。

Bigtableシステムには、主に3つの主なサーバータイプがあります

  1. マスターサーバー:タブレットをタブレットサーバーに割り当て、タブレットの場所を追跡し、必要に応じてタスクを再分配します。
  2. タブレットサーバー:サイズの制限(通常は100MB〜200MB)を超えた場合、タブレットおよび分割タブレットの読み取り/書き込み要求を処理します。タブレットサーバーに障害が発生すると、100台のタブレットサーバーがそれぞれ1つの新しいタブレットをピックアップし、システムが回復します。
  3. ロックサーバー:チャビー分散ロックサービスのインスタンス。BigTable内の多くのアクションでは、書き込み用にタブレットを開くこと、一度にアクティブなマスターが1つだけであることを確認すること、アクセス制御チェックなど、ロックの取得が必要です。

Googleのリサーチペーパーの例:

代替テキスト

Webページを格納するサンプルテーブルのスライス。行名は 逆URLです。コンテンツ列ファミリーにはページのコンテンツが含まれ、アンカー列ファミリーにはページを参照するアンカーテキストが含まれ ます。CNNのホームページはSports IllustratedとMY-lookの両方のホームページで参照されているため、行にはanchor:cnnsi.comおよび という名前の列が含まれています anchor:my.look.ca。各アンカーセルには1つのバージョンがあります。内容欄には、持っている3つのバージョンのタイムスタンプで、 t3t5、とt6

API

BigTableの一般的な操作は、テーブルと列ファミリーの作成と削除、データの書き込み、行からの列の削除です。BigTableは、APIでアプリケーション開発者にこの関数を提供します。トランザクションは行レベルでサポートされていますが、いくつかの行キーではサポートされていません。


こちらが研究論文のPDFへリンクです。

そして、ここでは、ワシントン大学での講演で、 Googleのバックエンドで使用されているBigtableコンテンツストレージシステムについて説明している、Googleのジェフディーンを紹介するビデオをご覧いただけます。


4
それがゼロから構築されたのか、それとも何かの製品に基づいたのか、誰か知っていますか?私はどこか覚えていないどこかで聞いたことがあります。そのgoogleは一度Oracleを使用しましたが、Oracleが実行できない、または許可しないいくつかの変更が必要なため、Googleはそれを削除しました。リンクを取得してみます。
OscarRyz、2009

5
他のほとんどのコアコンピテンシー(Webサーバー、GFSなど)と同様、ゼロから作成します。
マットJ

5
私は、圧縮アルゴリズム(BMDiffとジッピー)についての情報を探していると、今ジッピーがきびきびと呼ばれ、それがGoogleのコードで公開されていますことが判明した。code.google.com/p/snappy
HELIOSを

7
現在、BigTableの後継であるSpannerを使用しています
deltonio2 '28年

したがって、MongodbやMarklogicなどのnosqlデータベースに似ています。
stuckedoverflow


32

Spannerは、BigTableの後継であるGoogleのグローバルに分散されたリレーショナルデータベース管理システム(RDBMS)です。Googleは、各テーブルに主キーが必要であるため、これは純粋なリレーショナルシステムではないと主張しています。

こちらが論文のリンクです。

Spannerは、Googleのスケーラブルなマルチバージョンのグローバルに分散され、同期的に複製されるデータベースです。これは、世界規模でデータを配布し、外部整合性のある分散トランザクションをサポートする最初のシステムです。このペーパーでは、Spannerの構造、その機能セット、さまざまな設計上の決定の根底にある根拠、およびクロックの不確実性を明らかにする新しい時間APIについて説明します。このAPIとその実装は、外部整合性とさまざまな強力な機能をサポートするために重要です。過去の非ブロック読み取り、ロックフリーの読み取り専用トランザクション、Spanner全体でのアトミックスキーマの変更。

Googleが発明したもう1つのデータベースはMegastoreです。ここに要約があります:

Megastoreは、今日のインタラクティブなオンラインサービスの要件を満たすために開発されたストレージシステムです。Megastoreは、NoSQLデータストアのスケーラビリティと従来のRDBMSの利便性を斬新な方法で融合し、強力な一貫性の保証と高可用性の両方を提供します。データの細かいパーティション内で完全にシリアル化可能なACIDセマンティクスを提供します。このパーティショニングにより、適切なレイテンシで広域ネットワーク全体に各書き込みを同期的に複製し、データセンター間のシームレスなフェイルオーバーをサポートできます。このペーパーでは、Megastoreのセマンティクスとレプリケーションアルゴリズムについて説明します。また、Megastoreで構築された幅広いGoogle制作サービスをサポートした経験についても説明します。


Spannerがクローズドソースプロジェクトであることは残念です。説明によると、それを自分のプロジェクトにも使用したいです。
ミッコランタライネン2014年

2
あなたは(ゴキブリがアルファであるが)のApacheのHadoopエコシステムやCockroachDBをチェックアウトすることができます@MikkoRantalainen
dualed

ありがとう、CockroachDBは面白そうだ。私はそれをテストして、どんな種類のパフォーマンスがあるかを確認する必要があります。機能は私が欲しいものに似ています。
ミッコランタライネン2015

1
スパナは2017年以来、Googleクラウド上で使用するすべての人のために利用されている:cloud.google.com/spanner
悪党

19

他の人が述べたように、GoogleはBigTableと呼ばれる独自のソリューションを使用しており、それを実際に世界に紹介するいくつかの論文を発表しています。

Apacheの人々は、HBaseと呼ばれるこれらの論文で紹介されているアイデアを実装しています。HBaseは大規模なHadoopプロジェクトの一部であり、同社のサイトによれば、「膨大な量のデータを処理するアプリケーションを簡単に作成して実行できるソフトウェアプラットフォームです」。いくつかのベンチマークは非常に印象的です。彼らのサイトはhttp://hadoop.apache.orgにあります。


リンクが見つかりません404
Shivam Jha


9

また、BigTableがリレーショナルデータベース(MySQLなど)ではなく、非常に異なる特性を持つ巨大な(分散)ハッシュテーブルであることを知っておくと便利かもしれません。Google AppEngineプラットフォームでBigTableの(限定バージョン)をいじってみてください。

上記のHadoopの隣には、BigTableと同じ問題(スケーラビリティ、可用性)を解決しようとする他の多くの実装があります。私は昨日、それらのほとんどがここにリストされている素晴らしいブログ投稿を見まし


6

Googleは主にBigtableを使用しています。

Bigtableは、非常に大きなサイズにスケーリングするように設計された、構造化データを管理するための分散ストレージシステムです。

詳細については、こちらからドキュメントをダウンロードしてください

また、Googleは一部のアプリケーションにOracleおよびMySQLデータベースを使用しています。

追加できる情報があれば、高く評価されます。


17
Google also use Oracle-参照が必要です。
ユーザー

@user cloud.google.com/sql/docs?開発者がMySQLを使用できる場合、Googleは少なくとも、MySQLとBigtableで「データベーストランスレータ」を作成している必要があります。

1

Googleサービスには、ポリグロットパーシステンスアーキテクチャがあります。BigTableは、YouTube、Google検索、Googleアナリティクスなどのほとんどのサービスで利用されています。検索サービスは、最初はインデックスインフラストラクチャにMapReduceを使用していましたが、Caffeineのリリース中にBigTableに移行しました。

Google Cloudデータストアには、社内ユーザーと社外ユーザーの両方に対応する100を超えるアプリケーションがGoogleで運用されています。Gmail、Picasa、Googleカレンダー、Androidマーケット、AppEngineなどのアプリケーションは、Cloud DatastoreとMegastoreを使用します。

Googleトレンドでは、ストリーム処理にMillWheelを使用しています。Google広告は最初にMySQLを使用しましたが、後でF1 DB(カスタムで作成された分散リレーショナルデータベース)に移行しました。YoutubeはMySQLとVitessを使用しています。グーグルはグーグルファイルシステムの助けを借りて商品サーバー全体にエクサバイトのデータを保存します。

出典:Googleデータベース:ペタバイトからエクサバイトのスケールデータをGoogleサービスはどのように保存しますか?

YouTubeデータベース–ストレージスペースを使い果たすことなく、非常に多くの動画をどのように保存しますか?

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.